Ich habe zwei Dateien input1.csv und input2.csv, deren Größe sehr groß sind.Alternative Lösungen zum Analysieren riesige Datei
input1.csv hat drei Spalten A, B und C (B ist in dieser Datei eindeutig).
input2.csv hat 2 Spalten B und C.
ich überprüfen möchten, wie oft jedes Vorkommen von B in input2.csv Datei aufgetreten ist.
Ich habe durch Speichern von Wert B aus der Datei input1.csv in der Arraylist implementiert und verwendet hashmap mit Schlüssel als B's Wert und Wert als B's Vorkommen in der Datei input2.csv. Diese Logik funktioniert gut, aber die Ausführungszeit erhöht sich, wenn die Dateigröße zunimmt. Auch haben Sie den Code in der Hauptmethode selbst abgeschlossen. Gibt es eine andere Logik, um dieses Problem zu lösen? Da ich neu in Java bin, kann mir jemand ein gutes Designmuster für dieses Problem zur Verfügung stellen?
Programm:
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
}
}
}
Aus Ihrer Beschreibung scheint es eine gute Lösung zu sein. Wenn Sie nur Werte in der Hash-Karte überprüfen/erhöhen, sollten Sie keine größere Verzögerung erfahren, Hash-Karten sind amortisiert. Sie sollten Ihren Code posten, ich glaube, Sie haben einige Codierungsprobleme, die nicht mit dem Kernalgorithmus zusammenhängen. – lexicore
Hallo @lexicore haben meinen Code aktualisiert. – RAGA