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!
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.
Beachten Sie, dass wenn zwei Objekte gleich sind:
compareTo()
muss 0 zurückgeben. Sie müssen gleich
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% 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.
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
.
Tags und Links java set collections hash comparable