我有一个程序,它从列表中获取每个项目并将其与另一个列表中的所有其他项目进行比较。到目前为止它工作正常,但数据越来越大并且将超过系统内存。
我想知道比较两个非常大的列表(每个列表可能 5-10 GB)的最佳方法是什么?
这是我正在做的一个非常简单的示例(除了列表很大并且for循环中的值实际上正在被处理/比较)。
import java.util.Collection;
import java.util.HashSet;
import java.util.Arrays;
public class comparelists {
public static void main( String [] args ) {
String[] listOne = {"a","b",
"c","d",
"e","f",
"g","h",
"i","j",
"k","l"};
String[] listTwo = {"one",
"two",
"three",
"four",
"five","six","seven"};
for(int listOneItem=0; listOneItem<listOne.length; listOneItem++){
for (int listTwoItem=0; listTwoItem<listTwo.length; listTwoItem++) {
System.out.println(listOne[listOneItem] + " " + listTwo[listTwoItem]);
}
}
}
}
我意识到这里必须有一些磁盘 IO,因为它不适合内存,我最初的方法是将两个列表保存为文件并从 listOne 保存一堆行,然后流式传输 listTwo 的整个文件,然后获取更多行从 listOne 等等。有没有更好的办法?或者像我在上面做的那样访问列表的Java方式,但它会根据需要交换到磁盘?