0
我有两个文件input1.csv和input2.csv其大小很大。替代解决方案解析巨大的文件
input1.csv有三列A,B和C(B在此文件中是唯一的)。
input2.csv有2列B和C.
我要检查B的每一次出现多少次发生在input2.csv文件。
我已经实现了将input1.csv文件中的值B存储在arraylist中,并使用hashmap作为B的值和值,作为B在input2.csv文件中的出现。 这个逻辑工作正常,但是当文件大小增加时执行时间增加。也已经完成了主方法本身的代码。有没有其他的逻辑来解决这个问题?由于我是java新手,任何人都可以为我解决这个问题提供一个很好的设计模式?
计划:
import java.io.*;
import java.util.*;
public class Demo {
public static void main(String[] args) throws IOException{
BufferedReader reader = null;
String encoding = "UTF-8";
String comma = ",";
Map<String,Integer> hashMap = new HashMap<>();
ArrayList<String> arrayList = new ArrayList<String>();
reader = new BufferedReader(new InputStreamReader(new FileInputStream("input1.csv"), encoding));
for (String line; (line = reader.readLine()) != null;) {
String val = line.split(comma)[1];
arrayList.add(val); //Value to be later used
hashMap.put(val,0);
}
reader.close();
reader = new BufferedReader(new InputStreamReader(new FileInputStream("input2.csv"), encoding));
for (String line; (line = reader.readLine()) != null;) {
String val = line.substring(0,line.indexOf(","));
if(hashMap.get(val) !=null) {
hashMap.put(val, hashMap.get(val) + 1);
}
}
reader.close();
printMap(hashMap);
}
public static void printMap(Map mp) {
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
}
}
从您的描述来看,它似乎是一个很好的解决方案。如果你只是检查/增加哈希映射中的值,你不应该经历重大衰变,哈希映射是O(1)摊销。你应该发布你的代码,我相信你有一些与核心算法无关的编码问题。 – lexicore
嗨@lexicore已更新我的代码。 – RAGA