wake-up-neo.com

Was ist der Unterschied zwischen HashSet und Set?

Sah den Code-Ausschnitt so 

Set<Record> instances = new HashSet<Record>();

Ich frage mich, ob Hashset eine besondere Art von Set ist. Irgendein Unterschied zwischen ihnen?

59
user496949

Ein Set steht für eine generische "Menge von Werten". Eine TreeSet ist eine Menge, in der die Elemente sortiert sind (und somit sortiert werden), eine HashSet ist eine Menge, in der die Elemente nicht sortiert oder geordnet sind.

Ein HashSet ist normalerweise viel schneller als ein TreeSet.

Ein TreeSet wird normalerweise als rot-schwarzer Baum implementiert (Siehe http://en.wikipedia.org/wiki/Red-black_tree - Ich habe die tatsächliche Implementierung von Sun/Orakels TreeSet nicht validiert), während a HashSet erstellt mit Object.hashCode() einen Index in einem Array. Die Zugriffszeit für einen rot-schwarzen Baum ist O(log(n)), wohingegen die Zugriffszeit für ein HashSet von konstanter Zeit bis zum ungünstigsten Fall reicht (jedes Element hat den gleichen Hash-Code), wo Sie eine lineare Suchzeit O(n) haben können.

75
Erik

Die HashSet ist eine Implementierung einer Set .

31
vaugham

Die Frage wurde beantwortet, aber ich habe keine Antwort darauf gesehen, warum der Code beide Typen in demselben Code erwähnt.

Normalerweise möchten Sie gegen Schnittstellen codieren, die in diesem Fall Set sind. Warum? Wenn Sie Ihr Objekt immer über Schnittstellen referenzieren (mit Ausnahme des neuen HashSet ()), ist es trivial, die Implementierung des Objekts später zu ändern, wenn Sie es als besser empfinden, da dies in Ihrem Code nur einmal erwähnt wurde base (wo Sie neues HashSet () gemacht haben). 

14
MeBigFatGuy

Set ist die allgemeine Schnittstelle zu einer setartigen Sammlung, während HashSet eine spezifische Implementierung der Set-Schnittstelle ist (die Hash-Codes verwendet, daher der Name).

8
gmw

Set ist eine Sammlung, die keine doppelten Elemente enthält. Set ist eine Schnittstelle. 

HashSet implementiert die Set-Schnittstelle, die von einer Hashtabelle (eigentlich einer HashMap-Instanz) unterstützt wird. 

Da HashSet eine der spezifischen Implementierungen der Set-Schnittstelle ist. 

ASet kann eine der folgenden sein, da sie von untergeordneten Klassen implementiert wurde

ConcurrentSkipListSet : Eine skalierbare, gleichzeitige Implementierung von NavigableSet, die auf einer ConcurrentSkipListMap basiert. Die Elemente des Satzes werden nach ihrer natürlichen Reihenfolge oder nach einer Comparator zum festgelegten Erstellungszeitpunkt sortiert sortiert, abhängig davon, welcher Konstruktor verwendet wird.

CopyOnWriteArraySet : Ein Set, das eine interne CopyOnWriteArrayList für alle seine Vorgänge verwendet. 

EnumSet : Eine spezialisierte Set-Implementierung zur Verwendung mit Aufzählungstypen. Alle Elemente in einem Aufzählungssatz müssen von einem einzelnen Aufzählungstyp stammen, der explizit oder implizit angegeben wird, wenn der Satz erstellt wird.

TreeSet : Eine auf einer TreeMap basierende NavigableSet-Implementierung. Die Elemente werden nach ihrer natürlichen Reihenfolge oder mit einem Komparator angeordnet, der zum festgelegten Erstellungszeitpunkt bereitgestellt wird, abhängig davon, welcher Konstruktor verwendet wird.

LinkedHashSet : Implementierung der Set-Schnittstelle mit der Implementierung von Tabellen und verknüpften Listen mit vorhersagbarer Iterationsreihenfolge. Diese Implementierung unterscheidet sich von HashSet dadurch, dass sie eine doppelt verknüpfte Liste führt, die alle Einträge durchläuft. 

HashSet kann jedoch nur LinkedHashSet sein, da LinkedHashSet Unterklassen HashSet

3
Ravindra babu

Set ist eine übergeordnete Schnittstelle aller Set-Klassen wie TreeSet, LinkedHashSet usw. 

HashSet ist eine Klasse, die die Set-Schnittstelle implementiert.

2
u449355

HashSet ist eine von der Set-Schnittstelle abgeleitete Klasse. Als abgeleitete Klasse von Set erhält das HashSet die Eigenschaften von Set. Wichtige und die am häufigsten verwendeten abgeleiteten Klassen von Set sind HashSet und TreeSet.

0
Hemlata Gehlot

**

  • Einstellen:

** Dies ist eine Schnittstelle, die genau wie LIST und QUEUE ein Untertyp der Collection-Schnittstelle ist.

Set hat unter 3 Unterklassen, es wird verwendet, um mehrere Objekte ohne Duplikate zu speichern.

  1. HashSet
  2. LinkedHashSet
  3. TreeSet (implementiert die SortedSet-Schnittstelle)

**

  • HashSet:

**

Kann einen NULL-Wert verwenden (da Duplizieren nicht zulässig ist), werden Daten zufällig gespeichert, da die Reihenfolge nicht eingehalten wird.

0
Anonymous User