Java - Machen Sie eine Objektsammlung freundlich

8

Wenn ein Objekt einen eindeutigen Primärschlüssel enthält, welche Schnittstellen muss es implementieren, um sammlungfreundlich zu sein, insbesondere im Hinblick auf die Fähigkeit, effizient sortierbar, hashbar usw. zu sein?

Wenn der Primärschlüssel eine Zeichenkette ist, wie werden diese Schnittstellen am besten implementiert?

Danke!

    
Chris Dutrow 02.06.2010, 23:44
quelle

4 Antworten

10

Sie müssen Object.equals() und Object.hashCode() überschreiben und auch die Schnittstelle Comparable implementieren. Dies macht Ihre Klasse vollständig "kompatibel", wenn Sie irgendeine Art von Sortierung oder Hashing durchführen, einschließlich der Verwendung von Collections.sort( ), einer beliebigen Klasse Map oder einer beliebigen Klasse Set . Wenn es sogar eine winzige Chance gibt, dass die Klasse in eine Art Sammlung eingefügt wird, sollte definitiv alle drei Methoden implementieren.

%Vor%

Beachten Sie, dass wenn zwei Objekte gleich sind:

  1. ihre Hash-Codes müssen auch gleich sein und
  2. compareTo() muss 0 zurückgeben.
Michael 03.06.2010, 00:06
quelle
12

Sie müssen gleich , hashCode und ( nach der Implementierung der Vergleichbaren Benutzeroberfläche compareTo .

Da Sie in jedem Fall eine Zeichenfolge haben, die ein Primärschlüssel ist, können Sie diese Aufrufe einfach an Ihre Zeichenfolge senden. Zum Beispiel:

%Vor%     
Eli Courtwright 02.06.2010 23:48
quelle
5

Strings eignen sich bereits sehr gut für Hashing und Vergleich. Wenn Ihre Objekte wirklich eindeutig durch Strings identifiziert werden können, sind Sie in guter Verfassung. Stellen Sie sicher, dass Sie die Schnittstelle Comparable für das Sortieren und Überschreiben von equals und hashCode (delegieren in die Primärschlüsselzeichenfolge) für Hashing implementieren, und Sie können loslegen.

    
maerics 02.06.2010 23:49
quelle
3

Wenn der Primärschlüssel ein Object ist, müssen Sie entscheiden, ob die Sortierreihenfolge auf dem Object oder dem Object Primärschlüssel Object basiert.

In beiden Fällen sollte das zu sortierende Element die Schnittstelle Comparable mit einer geeigneten Methode compareTo() implementieren. Die Odds sind exzellent, das heißt, Sie müssen auch equals() und hashCode() überschreiben, da nur einige der Primärschlüssel-Objekte wahrscheinlich über geeignete Standardimplementierungen verfügen.

Wenn Sie nach einer nicht-natürlichen Sortierreihenfolge sortieren möchten, implementieren Sie auch ein paar "extra" Comparators . Bestellte Collections support alternative Comparators .

    
Edwin Buck 02.06.2010 23:51
quelle