Hey,
ich bin gerade dabei eine Textdatei mit etwa 1,1 Millionen Strings zu ordnen.
Da das ganze per Quicksort extrem lange dauert wollte ich mit mehrdimensionalen Listen arbeiten.
Die 17 steht für die Stringlänge
Die 36 steht für alphanumeric (a-z 0-9)
List<String>[][] lists = new List[17][36];
Allerdings bekomme ich beim einfügen in die Listen eine NullPointerException und weiß nicht warum. Ich meine das der Fehler schon in der genannten Zeile des Programms liegt. Bin mir aber nicht sicher. Daher hier nochmal der komplette Code.
Hoffe es jat jemand rat.
Falls jemand eine Idee für ein schnelleres sortierverfahren hat - nur zu - nur nicht zu schwer stecke noch in den Startlöchern.
Edit: Hier wird noch nicht sortiert, nicht wundern. Die Textdatei am anfang ist nur zum Testen. Später kommen durchweg neue Einträge.
ich bin gerade dabei eine Textdatei mit etwa 1,1 Millionen Strings zu ordnen.
Da das ganze per Quicksort extrem lange dauert wollte ich mit mehrdimensionalen Listen arbeiten.
Die 17 steht für die Stringlänge
Die 36 steht für alphanumeric (a-z 0-9)
List<String>[][] lists = new List[17][36];
Allerdings bekomme ich beim einfügen in die Listen eine NullPointerException und weiß nicht warum. Ich meine das der Fehler schon in der genannten Zeile des Programms liegt. Bin mir aber nicht sicher. Daher hier nochmal der komplette Code.
Code:
import org.apache.commons.lang.time.StopWatch;
import java.io.*;
import java.util.*;
public class NameListGen {
public static void main(String[] args) throws Exception {
File file = new File("newfile.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
StopWatch stopWatch = new StopWatch();
stopWatch.start();
List<String>[][] lists = new List[17][36];
String line = null;
int totalLinesProcessed = 0;
int comparedLines = 0;
while ((line = br.readLine()) != null) {
totalLinesProcessed++;
int length = line.length();
char firstchar = line.charAt(0);
if (line.charAt(0) < 58){
firstchar -= 48;
}
else if (line.charAt(0) < 91){
firstchar -= 65;
}
else if (line.charAt(0) < 123){
firstchar -= 97;
}
System.out.println((int)firstchar);
System.out.println(length-3 + " (real:" + length + ")");
System.out.println(line);
lists[length-3][5].add(line);
}
for (int i = 0; i < 17; i++) {
for (int j = 0; j < 36;j++){
PrintStream ps = new PrintStream(new FileOutputStream("C:\\Youtube\\Count" + i + "Char" + j ));
ps.println(lists[i][j].toString());
}
}
stopWatch.stop();
br.close();
System.out.println("Total lines processed = " + totalLinesProcessed
+ " Lines copied = "+ comparedLines + " Time taken = " + stopWatch.getTime() + " ms");
}
}
Hoffe es jat jemand rat.
Falls jemand eine Idee für ein schnelleres sortierverfahren hat - nur zu - nur nicht zu schwer stecke noch in den Startlöchern.
Edit: Hier wird noch nicht sortiert, nicht wundern. Die Textdatei am anfang ist nur zum Testen. Später kommen durchweg neue Einträge.
Zuletzt bearbeitet: