来自平面文件,该文件包含行划分的数据,我的任务是从db验证的不存在的数据,我试图使用Java首先验证我已将平面文件数据插入HashSet1和另一个HashSet2对于DB数据之后,我试图检查HashSet1.Contain(HashSet2),以便我可以识别DB中不存在的数据。
下面给出的是虚拟代码,您可以假定HashSet1(其中一些丢失的数据)作为文件读取器数据和HashSet2(来自DB的完整数据)作为DB Data
但是,正如我在这里提到的,我需要验证3000万个数据,我能够通过这种方式验证100万个数据,但无法验证3000万个数据,这是我的任务。有什么最好的方法可以做到这一点,我们将非常感谢。
public class App
{
public static void sampleMethod() {
Set<Integer> hashset1 = new HashSet<Integer>();
Set<Integer> hashset2 = new HashSet<Integer>();
for(int i = 0; i<30000000; i++ ) {
if(i %50000 != 0) {
hashset1.add(i);
}
}
int count = 0;
for(int j =0;j<30000000;j++) {
if(hashset1.contains(j)) {
count++;
} else {
System.out.println(j+" Is Not Present");
hashset2.add(j);
}
}
System.out.println("Contain Value Count" + count);
}
public static void main( String[] args )
{
sampleMethod();
}
}
错误堆栈跟踪:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.resize(HashMap.java:703)
at java.util.HashMap.putVal(HashMap.java:662)
at java.util.HashMap.put(HashMap.java:611)
at java.util.HashSet.add(HashSet.java:219)
at com.java.anz.BankingPro.App.sampleMethod(App.java:20)
at com.java.anz.BankingPro.App.main(App.java:38)
用于组合两组数据,仅将两个较小的较小的较小的数据加载到标签(1.)中就足够了(1.),然后,作为下一步,检测集合的差异(2.),然后根据发现的差异修改数据(3.)。让我们在以下伪代码中称为小型集smallHashSet
:
-
将较小的数据集加载到
smallHashSet
中 迭代(循环)在更大的数据集中的条目上,一一 - 不要一次加载一次,只要一个接一个地加载一个然后一次处理一个:
2.1。假设
bigSetEntry
是从较大组中的条目,然后是
if (smallHashSet.contains(bigSetEntry)) smallHashSet.remove(bigSetEntry)
。完成后,
smallHashSet
仅包含小集合中的条目,但在大集合中缺少。而且您永远不需要一次加载大型集合。您现在可以使用这些不同的条目来做些事情,例如将它们添加到大数据文件中。