リストから各アイテムを取得し、それを別のリスト内の他のすべてのアイテムと比較するプログラムがあります。これまでのところ問題なく動作していますが、データが大きくなり、システム メモリを超えようとしています。
非常に大きな 2 つのリスト (各リストが 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の方法ですが、必要に応じてディスクにスワップしますか?