„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > HashSet erkunden: Ein Tauchgang in ungeordnete Sammlungen

HashSet erkunden: Ein Tauchgang in ungeordnete Sammlungen

Veröffentlicht am 08.11.2024
Durchsuche:858

Exploring HashSet: A Dive into Unordered Collections

Einführung

Die HashSet-Klasse ist Teil des Java Collections Framework und stellt eine schnelle, ungeordnete Sammlung bereit, die keine doppelten Elemente zulässt. Es baut auf der HashMap auf, was bedeutet, dass es die gleichen zeitlichen Komplexitätsvorteile erbt, sich aber ausschließlich auf die Einzigartigkeit der Elemente konzentriert. In diesem Artikel untersuchen wir, wie HashSet funktioniert, was es einzigartig macht und warum es sich von anderen Sammlungen unterscheidet.


Was ist ein HashSet?

Ein HashSet ist:

  • Ungeordnet: Die Elemente haben keine vorhersehbare Reihenfolge.
  • Unique: Doppelte Elemente werden ignoriert.
  • Intern unterstützt durch eine HashMap: Es verwendet eine HashMap zum Speichern von Elementen und konzentriert sich nur auf die Schlüssel, während Werte verworfen werden.
  • O(1) durchschnittliche Zeitkomplexität: Vorgänge wie Einfügen, Löschen und Suchen sind hocheffizient.

1. Initialisieren eines HashSets

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));

// Default constructor with default capacity 16
Set set = new HashSet();

Erläuterung:

  • Standardkonstruktor: Erstellt ein HashSet mit einer Anfangskapazität von 16.
  • Parametrierter Konstruktor: Sie können die anfängliche Kapazität angeben, beachten Sie jedoch, dass Kapazität nicht mit Größe identisch ist. Die Größe bezieht sich auf die tatsächliche Anzahl der Elemente im Satz.
  • Verwenden einer Sammlung: Ein HashSet kann aus einer Sammlung wie einer Liste erstellt werden, um sicherzustellen, dass nur eindeutige Elemente beibehalten werden.

2. Elemente zu einem HashSet hinzufügen

set.add(1);
set.add(2);
set.add(1); // Duplicate value is ignored
System.out.println(set); // Output -> [1, 2]

Erläuterung:

  • Die Methode add() fügt Elemente in das HashSet ein.
  • Doppelte Elemente werden ignoriert. Wenn Sie versuchen, 1 zweimal hinzuzufügen, wird nur das erste Vorkommen beibehalten.

Schlüssel zum Mitnehmen

Wenn Sie doppelte Werte ersetzen müssen, anstatt sie zu ignorieren, ist HashSet nicht die richtige Wahl. Dies liegt daran, dass die Einzigartigkeit von Elementen priorisiert wird.


3. Überprüfen von Größe und Kapazität

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);
System.out.println(setWithInitialCapacity.size()); // Output -> 0

Auch wenn die Kapazität von setWithInitialCapacity 5 beträgt, ist die Größe 0, da die Größe die Anzahl der im Satz vorhandenen Elemente widerspiegelt, nicht die anfängliche Kapazität. Sie können sich Kapazität als den internen Speicherplatz vorstellen, der sich anpasst, wenn Elemente hinzugefügt werden.


4. Verwendung von HashSet mit Sammlungen

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));
System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]

Erläuterung:

  • Obwohl drei Elemente in der Liste bereitgestellt wurden (4, 4, 3), wurde der doppelte Wert 4 verworfen, sodass nur zwei Elemente (3 und 4) übrig blieben.
  • Die Reihenfolge der Elemente ist unvorhersehbar, da HashSet keine Einfügung oder natürliche Reihenfolge beibehält.

Wenn Sie sortierte Elemente beibehalten müssen, sollten Sie die Verwendung eines TreeSet in Betracht ziehen, das sicherstellt, dass Elemente in aufsteigender Reihenfolge angeordnet werden.


5. Indizierung in HashSet – Ist das möglich?

In Interviews wird häufig gefragt, ob Sie einen Index eines Elements in einem HashSet abrufen können. Die Antwort ist Nein, da HashSet einen Hashing-Mechanismus zum Speichern von Elementen verwendet, keine indexbasierte Struktur wie eine Liste oder ein Array.


Zusammenfassung der wichtigsten Punkte

  1. Ungeordnet und einzigartig: HashSet behält nur eindeutige Elemente und ignoriert Duplikate.
  2. Aufgebaut auf HashMap: Es verwendet die Schlüssel einer internen HashMap, um Elemente zu speichern.
  3. Schnelle Operationen: Die durchschnittliche Zeitkomplexität beträgt O(1) für das Hinzufügen, Entfernen und Überprüfen von Elementen.
  4. Kapazität vs. Größe: Die Kapazität ist der zugewiesene Speicherplatz, während die Größe die tatsächliche Anzahl der Elemente ist.
  5. Keine Indizierung: Sie können aufgrund des Hashing-Mechanismus keine Elemente nach Index abrufen.

Beziehung zu HashMap

Da HashSet von einer HashMap unterstützt wird, verwendet es die Schlüssel der Karte zum Speichern von Elementen, während die Werte irrelevant sind. Aus diesem Grund muss jedes Element in einem HashSet eindeutig sein, genau wie die Schlüssel in einer HashMap.


Abschluss

HashSet ist ein leistungsstarkes Tool, wenn Sie eine schnelle, ungeordnete Sammlung benötigen, die Duplikate vermeidet. Während es für die meisten Vorgänge eine O(1) Zeitkomplexität bietet, fehlen ihm Funktionen wie Sortieren und Indizieren. Für Entwickler hilft das Wissen, wie HashSet mit HashMap zusammenhängt, das Innenleben zu verstehen und das Sammlungs-Framework besser zu nutzen.

Im nächsten Beitrag gehen wir einer häufig gestellten Frage im Vorstellungsgespräch nach, die in Vorstellungsgesprächen häufig gestellt wird, um das Wissen der Kandidaten über Inkassokonzepte zu testen.


Verwandte Beiträge

  • Java-Grundlagen

  • Array Interview Essentials

  • Java Memory Essentials

Viel Spaß beim Codieren!

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/arshisaxena26/exploring-hashset-a-dive-into-unordered-collections-4ehb?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3