Es wurden viele Antworten gegeben, die auf technischen Erwägungen beruhen, insbesondere in Bezug auf die Leistung. Meiner Meinung nach ist die Wahl zwischen TreeSet
y HashSet
Angelegenheiten.
Ich würde aber eher sagen, dass die Wahl von folgenden Faktoren bestimmt werden sollte konzeptionell erste Überlegungen.
Wenn für die Objekte, die Sie bearbeiten müssen, eine natürliche Reihenfolge keinen Sinn macht, dann verwenden Sie nicht TreeSet
.
Es handelt sich um eine sortierte Menge, da sie Folgendes implementiert SortedSet
. Das bedeutet, dass Sie die Funktion überschreiben müssen compareTo
was mit dem übereinstimmen sollte, was die Funktion equals
. Wenn Sie zum Beispiel eine Menge von Objekten einer Klasse namens Student haben, dann glaube ich nicht, dass ein TreeSet
wäre sinnvoll, da es keine natürliche Reihenfolge zwischen den Schülern gibt. Man kann sie nach ihrem Notendurchschnitt ordnen, aber das ist keine "natürliche Ordnung". Funktion compareTo
würde nicht nur 0 zurückgeben, wenn zwei Objekte denselben Schüler repräsentieren, sondern auch, wenn zwei verschiedene Schüler dieselbe Note haben. Für den zweiten Fall, equals
würde false zurückgeben (es sei denn, Sie entscheiden sich dafür, dass letzteres true zurückgibt, wenn zwei verschiedene Schüler die gleiche Note haben, was dazu führen würde, dass equals
Funktion eine irreführende, um nicht zu sagen eine falsche Bedeutung haben).
Bitte beachten Sie diese Konsistenz zwischen equals
y compareTo
ist optional, wird aber dringend empfohlen. Andernfalls wird der Vertrag der Schnittstelle Set
gebrochen ist, so dass Ihr Code für andere Menschen irreführend ist und möglicherweise zu unerwartetem Verhalten führt.
この enlace könnte eine gute Informationsquelle für diese Frage sein.