Java中List的Cartesian

时间:2016-04-14 10:19:17

标签: java list cartesian-product

我尝试使用以下代码生成List in Java的笛卡尔积:

private static List<List<String>> getCartesian(List<List<String>> initialList) 
{
    List<List<String>> result = new ArrayList<List<String>>();
    result.add(new ArrayList<String>());
    for (List<String> first : initialList) 
    {
        List<List<String>> temporaryList = new ArrayList<List<String>>();
        for (List<String> second : result) 
        {
            for (String word : first) 
            {
                List<String> tmp2 = new ArrayList<String>(second);
                tmp2.add(word);
                temporaryList.add(tmp2);
            }
        }
        result = temporaryList;
    }
    return result;
}

使用大型列表时出现以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

如何才能让它适用于大数据呢?

1 个答案:

答案 0 :(得分:0)

你应该尽量避免使用➜ md git:(master) ✗ git push -u origin master error: Could not read 21ad3b15ed4c0088cf5ca88b9f2a93a64c0dea2f fatal: revision walk setup failed error: failed to push some refs to 'git@github.com:m4rx9/geekbookx.git' 这样的事情。生成结果所需的所有信息都包含在原始ArrayList中,因此无需在内存中同时存在所有答案。

以下代码生成一个等于List<List<String>>的列表,但它不会将它全部存储在一个大的getCartesian中。相反,它会复制所有原始列表,并在请求时计算单个答案。

ArrayList