我有一個程序,從列表中的每個項目,並將其與另一個列表中的所有其他項目進行比較。迄今爲止它一直工作得很好,但數據量變大,將超過系統內存。比較兩個非常大的列表(不適合內存)的最佳方法是什麼?
我想知道什麼是最好的方式來比較兩個非常大的列表(也許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在這裏,因爲它不適合在內存中,我INTIAL方法是兩個列表保存爲文件,並保存了一堆從那麼listOne線,然後流的整個文件listTwo,然後從listOne中獲得更多的行等等。有沒有更好的辦法?或者像我在上面那樣訪問列表的Java方式,但是根據需要交換到磁盤?
http://programmers.stackexchange.com/ –
*這兩個*列表太大而不適合內存?你需要做什麼比較,結果會是什麼? –
@JonSkeet對於內存來說都是太大了。每個項目都是一堆數據並在程序中處理。它不是簡單的文本比較或任何東西。 – user1735075