我尝试使用以下代码生成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
如何才能让它适用于大数据呢?
答案 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