GeeksforGeeks

Wie wir wissen, ist ein Set eine genau definierte Sammlung verschiedener Objekte. Jedes Mitglied einer Menge wird als Element der Menge bezeichnet. Mit anderen Worten, wir können sagen, dass eine Menge niemals doppelte Elemente enthält. Aber wie in Java Set Interface implementierte Klassen wie HashSet, LinkedHashSet, TreeSet usw. erreichen Sie diese Einzigartigkeit. In diesem Beitrag werden wir die verborgene Wahrheit hinter dieser Einzigartigkeit diskutieren.

Wie funktioniert HashSet intern in Java?

Achtung Leser! Hör jetzt nicht auf zu lernen. Holen Sie sich alle wichtigen Java Foundation und Collections Konzepte mit den Grundlagen von Java und Java Collections Kurs zu einem studentenfreundlichen Preis und werden Industrie bereit. Um Ihre Vorbereitung vom Erlernen einer Sprache auf DS Algo und vieles mehr abzuschließen, lesen Sie bitte den vollständigen Interviewvorbereitungskurs.

 Wie Set/HashSet intern in Java
Wir werden dies anhand eines Beispiels verstehen.Sehen wir uns die Ausgabe des folgenden Programms an, das versucht, doppelte Elemente in einem HashSet hinzuzufügen.

import java.util.HashSet;
class Test
{
public static void main(String args)
{
HashSet hs = new HashSet();
boolean b1 = hs.add("Geeks");
boolean b2 = hs.add("GeeksforGeeks");
boolean b3 = hs.add("Geeks");
System.out.println("b1 = "+b1);
System.out.println("b2 = "+b2);
System.out.println("b3 = "+b3);
System.out.println(hs);
}
}



Ausgang:

b1 = trueb2 = trueb3 = false

Nun aus der Ausgabe, es ist klar, dass, wenn wir versuchen, ein doppeltes Element zu einem Satz hinzufügen mit add() Methode, es gibt false, und Element wird nicht hinzugefügt hashset, wie es bereits vorhanden ist. Nun stellt sich die Frage, wie die add () -Methode prüft, ob die Menge das angegebene Element bereits enthält oder nicht. Es wird klarer, wenn wir einen genaueren Blick auf die add() Methode und Standardkonstruktor in HashSet Klasse.

// predefined HashSet classpublic class HashSet{ // A HashMap object private transient HashMap map; // A Dummy value(PRESENT) to associate with an Object in the Map private static final Object PRESENT = new Object(); // default constructor of HashSet class // It creates a HashMap by calling // default constructor of HashMap class public HashSet() { map = new HashMap(); } // add method // it calls put() method on map object // and then compares it's return value with null public boolean add(E e) { return map.put(e, PRESENT)==null; } // Other methods in Hash Set}

Nun, wie Sie sehen können, wenn wir ein HashSet erstellen, erstellt es intern eine HashMap und wenn wir ein Element mit der add() -Methode in dieses HashSet einfügen, ruft es tatsächlich die put() -Methode auf intern erstelltes HashMap-Objekt mit Element, das Sie als Schlüssel und konstantes Objekt mit dem Namen „PRESENT“ als Wert angegeben haben. Wir können also sagen, dass eine Menge intern durch HashMap Eindeutigkeit erreicht. Jetzt kommt die ganze Geschichte herum, wie eine HashMap- und put () -Methode intern funktioniert.

Wie wir in einer HashMap wissen, ist jeder Schlüssel eindeutig und wenn wir die put(Key, Value) -Methode aufrufen, wird der vorherige Wert zurückgegeben, der dem Schlüssel zugeordnet ist, oder null, wenn es keine Zuordnung für den Schlüssel gab. Also überprüfen wir in der add() -Methode den Rückgabewert von map .put(Schlüssel, Wert) -Methode mit Null-Wert.

  1. Wenn Karte.put(Schlüssel, Wert) gibt null zurück, dann die Anweisung „map.put(e, PRESENT) == null“ gibt true zurück und das Element wird zum HashSet hinzugefügt (intern HashMap).
  2. Wenn Karte.put(key, value) gibt den alten Wert des Schlüssels zurück, dann die Anweisung „map.put(e, PRESENT) == null“ gibt false zurück und das Element wird nicht zum HashSet hinzugefügt (intern HashMap).

Da LinkedHashSet HashSet erweitert, werden intern Konstruktoren von HashSet mit super() aufgerufen. In ähnlicher Weise erstellt das interne Erstellen eines Objekts der TreeSet-Klasse ein Objekt der navigierbaren Karte als Hintergrundkarte.

Verwandter Artikel: Wie HashMap intern in Java funktioniert.

Dieser Artikel wurde von Gaurav Miglani verfasst. Wenn Sie GeeksforGeeks mögen und einen Beitrag leisten möchten, können Sie auch einen Artikel mit contribute schreiben.in: geeksforgeeks.org oder mailen Sie Ihren Artikel an [email protected] . Sehen Sie sich Ihren Artikel auf der GeeksforGeeks-Hauptseite an und helfen Sie anderen Geeks.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.