Hallo!
Also ich lese in meinem Programm eine Datei ein, welche pro Zeile 1 Buchstabe und 3 Zahlen enthaelt, jeweils abgetrennt von einem \t (tab), also z.B.
A 1 3 4
B 2 5 2
A 4 0 9
........
So ich muss nun in meinem Programm jede A und jede B Zeile zusammenfuegen, wenn die erste Zahl uebereinstimmt, also wuerde z.B. sowas zusammgengefuegt werden:
A 1 3 5
B 2 2 1
B 1 9 6
--> gemerged wird (A 1 3 5) und (B 1 9 6) zu: AB 1 3 5 9 6
Also ich lese erst mal die zeilen ein, und teile diese in zweii Arraylists
--> ArrayLists sind aber Laufzeit ineffizient, was kann ich da sonst benutzen? Oder irgendwas statt dem array int[]?
So und nun muss ich ja gleiche eintraege finden, hier habe ich jedoch gar keine idee :S. Das einzige, was mir spontan eingefallen ist, ist eine zweifache Schleife und alles miteinander zu vergleichen, also quasi:
jedoch ist das ja sehr ineffizient, vorallem dass ich dann einen Eintrag im array ersetzen muesste, und dann aus dem ASrray was loeschen waehrend ich noch darueber iteriere :S
aber das groesste problem ist die ineffizienz, alles miteinander zu vergleichen
Also ich lese in meinem Programm eine Datei ein, welche pro Zeile 1 Buchstabe und 3 Zahlen enthaelt, jeweils abgetrennt von einem \t (tab), also z.B.
A 1 3 4
B 2 5 2
A 4 0 9
........
So ich muss nun in meinem Programm jede A und jede B Zeile zusammenfuegen, wenn die erste Zahl uebereinstimmt, also wuerde z.B. sowas zusammgengefuegt werden:
A 1 3 5
B 2 2 1
B 1 9 6
--> gemerged wird (A 1 3 5) und (B 1 9 6) zu: AB 1 3 5 9 6
Also ich lese erst mal die zeilen ein, und teile diese in zweii Arraylists
--> ArrayLists sind aber Laufzeit ineffizient, was kann ich da sonst benutzen? Oder irgendwas statt dem array int[]?
Java:
BufferedReader read = new BufferedReader(new FileReader(filePath));
ArrayList<int[]> allA = new ArrayList<int[]>();
ArrayList<int[]> allB = new ArrayList<int[]>();
String s = null;
while ((s = read.readLine()) != null) {
if (s.contains("A")) {
String[] part = s.split("\t");
int[] line = new int[3];
//parts[0] ist ja das A oder B
line[0] = Integer.parseInt(parts[1]);
line[1] = Integer.parseInt(parts[2]);
line[2] = Integer.parseInt(parts[3]);
allA.add(line);
} else if (s.contains("B")) {
int[] line = new int[3];
//parts[0] ist ja das A oder B
line[0] = Integer.parseInt(parts[1]);
line[1] = Integer.parseInt(parts[2]);
line[2] = Integer.parseInt(parts[3]);
allB.add(line);
}
}
So und nun muss ich ja gleiche eintraege finden, hier habe ich jedoch gar keine idee :S. Das einzige, was mir spontan eingefallen ist, ist eine zweifache Schleife und alles miteinander zu vergleichen, also quasi:
Java:
for (int i =0; i < allA.size();i++) {
for (int j =0; j < allB.size();j++) {
if (allA.get(i)[0] == allB.get(j)[0]) {
//merge them
// und jetzt aus array loeschen :S
}
}
}
jedoch ist das ja sehr ineffizient, vorallem dass ich dann einen Eintrag im array ersetzen muesste, und dann aus dem ASrray was loeschen waehrend ich noch darueber iteriere :S
aber das groesste problem ist die ineffizienz, alles miteinander zu vergleichen