크기가 큰 두 개의 파일 input1.csv 및 input2.csv가 있습니다.대체 솔루션 대용량 파일 구문 분석 용
input1.csv에는 3 개의 열 A, B 및 C가 있습니다 (B는이 파일에서 고유합니다).
input2.csv 2 열 B와 C
나는 B의 각 occurance가 input2.csv 파일에 발생 횟수를 확인 할 있습니다.
나는 arraylist의 input1.csv 파일에서 B 값을 저장하여 구현했으며 input2.csv 파일에서 B의 출현 값과 B 값으로 키를 사용하는 hashmap을 사용했습니다. 이 논리는 잘 작동하지만 파일 크기가 커질수록 실행 시간이 길어집니다. 또한 주 메서드 자체에서 코드를 완료했습니다. 이 문제를 해결할 다른 논리가 있습니까 ??? 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