Wortpaare - HashMap - ArrayList

FanClub

Mitglied
Hi,

ich habe ein kleines Problem und stehe etwas auf dem Schlauch.

Ich lese Daten aus einer DB aus. Diese Tabelle ist zweispaltig und diese Spalten bilden zusammen einen Primärschlüssel. Wie kann ich diese Daten jetzt als Wertepaar speichern?
Beispiel:
Nummer | Code
1 C1
1 C11
1 C112
2 B5
2 B54
3 C11
3 C113

Bei einer Hashmap mit der "Nummer" als Key, wird dieser beim "pushen" ja immer wieder überschrieben.
Aber ich will das so speichern wie angegeben.

Später möchte ich dann diese Liste von Wertepaare durchlaufen und mit einer anderen Liste vergleichen. In der Liste stehen die aktuellen "Codes". Dabei sollen die veraltete "Codes" aus der oberen Liste entfernt werden. So:

1 C1
1 C11
2 B54
3 C11

Da wird es sicher ne Lösung geben? 🙂

gruß
 
Ich würde dir eine Klasse mit den beiden Attributen ans Herz legen. Die Elemente kannst du dann einfach in eine Liste packen.
 
Mach dir ein eigenes Objekt, überschreib hashCode und equals korrekt und verwende dann ein Set (z.B. LinkedHashSet). Dann hast du auch eine Laufzeit von [c]O(n + m)[/c] an Stelle von [c]O(n * m)[/c].
 
Ich habe es jetzt mit einer zusätzlichen Klasse gelöst.
Leider weiß ich nicht genau was du meinst faetzminator. Kannst du es mir etwas näher erklären?
 
Quick und Dirty und nicht ganz zuverlässig mit Trennzeichen:
Java:
1#C1
1#C11
1#C112
2#B5
2#B54
3#C11
3#C113
wenns nur ein einmaliger Vorgang ist und das Trennzeichen sonst nicht vorkommt (!) würd ich das so machen
 
FanClub hat gesagt.:
Leider weiß ich nicht genau was du meinst faetzminator. Kannst du es mir etwas näher erklären?
Ich mach das ma: Du hast eine eigene Klasse vermutlich mit einem int für die id und einem String für den Code. Wenn zwei Instanzen dieser Klasse die gleichen Werte für id und Code haben, dann wirst Du sie als fachlich gleich ansehen wollen. In Java-sprech heißt dass, dass ein Aufruf von equals true zurück liefern muss. Damit es das tut, musst Du equals entsprechend übershreiben. Wenn man equals überschreibt, muss man auch hashCode überschreiben. Denn für zwei gleiche Instanzen MUSS der gleiche hashCode zurück geliefert werden und bei zwei verschiedenen Instanzen SOLLTE ein verschiedener hashCode geliefert werden.

Erst, wenn Du das gemacht hast, kannst du Instanzen Deiner Klasse vernünftig in Collections speichern.
 
Zuletzt bearbeitet von einem Moderator:
Genau.
Danach einfach mit [c]retainAll[/c] arbeiten. Hier ein Beispiel:
Java:
Set<String> someData = new LinkedHashSet<String>(Arrays.asList("foo", "bar", "baz"));
Set<String> otherData = new HashSet<String>(Arrays.asList("bar", "quoz"));

someData.retainAll(otherData);

for (String s : someData) {
    System.out.println(s); // wird foo und baz ausgeben
}
 

Neue Themen


Zurück
Oben