У меня есть два файла input1.csv и input2.csv, размеры которых огромны.Альтернативные решения для синтаксического анализа Огромный файл
input1.csv имеет три столбца A, B и C (B уникален в этом файле).
input2.csv имеет 2 колонки B и C.
Я хочу, чтобы проверить, сколько раз каждый из B вхождение произошло в input2.csv файле.
Я реализовал, сохраняя значение B из файла input1.csv в 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