Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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:
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 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.
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
}