Geeksforgeks

omdat we weten dat een set een goed gedefinieerde verzameling van verschillende objecten is. Elk lid van een verzameling wordt een element van de verzameling genoemd. Dus met andere woorden, we kunnen zeggen dat een verzameling nooit dubbele elementen zal bevatten. Maar hoe in java Set interface geïmplementeerd klassen zoals HashSet, LinkedHashSet, TreeSet etc. bereik deze uniciteit. In dit artikel zullen we de verborgen waarheid achter deze uniciteit bespreken.

Hoe werkt HashSet intern in Java?

Attentie lezer! Stop nu niet met leren. Krijg greep van alle belangrijke Java Foundation en collecties concepten met de grondbeginselen van Java en Java Collections cursus tegen een student-vriendelijke prijs en industrie klaar. Om uw voorbereiding te voltooien van het leren van een taal tot DS Algo En nog veel meer, verwijzen wij u naar Complete Interview voorbereidingscursus.

Hoe Set / HashSet intern werkt in Java
zullen we dit met een voorbeeld begrijpen.Laten we eens kijken naar de uitvoer van het volgende programma dat probeert om dubbele elementen toe te voegen in een HashSet.

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);
}
}



Uitgang:

b1 = trueb2 = trueb3 = false

nu uit de uitvoer, is het duidelijk dat wanneer we proberen om een duplicaat element toe te voegen aan een set met behulp van add() methode, het geeft false, en element is niet toegevoegd aan hashset, omdat het al aanwezig is. Nu komt de vraag, hoe add() methode controleert of de set al het opgegeven element bevat of niet. Het zal duidelijker zijn als we de methode add() en de standaard constructor in HashSet class nader bekijken.

// 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}

nu kunt u zien dat wanneer we een HashSet maken, het intern een HashMap maakt en als we een element in deze HashSet invoegen met behulp van de methode add (), het in feite put() methode aanroept op intern aangemaakte HashMap object met element dat u hebt opgegeven als sleutel en constant Object genaamd “PRESENT” als waarde. Dus we kunnen zeggen dat een Set intern uniciteit bereikt door middel van HashMap. Nu komt het hele verhaal rond hoe een HashMap en put() methode intern werkt.

zoals we weten in een HashMap is elke sleutel uniek en wanneer we put(Key, Value) methode aanroepen, retourneert deze de vorige waarde geassocieerd met key, of null als er geen toewijzing voor key was. Dus in de methode add() controleren we de retourwaarde van de kaart.put (key, value) methode met null waarde.

  1. If map.put (key, value) geeft null terug, dan de statement “map.put (e, PRESENT) = = null” geeft true terug en element wordt toegevoegd aan de HashSet(intern HashMap).
  2. If map.put (key, value) geeft de Oude waarde van de sleutel terug, daarna de statement “map.put (e, PRESENT) = = null” geeft false terug en element wordt niet toegevoegd aan de HashSet(intern HashMap).

als LinkedHashSet breidt HashSet uit, zodat het intern constructors van HashSet aanroept met behulp van super (). Op dezelfde manier maakt het creëren van een object van TreeSet klasse intern object van bevaarbare kaart als backing map.

gerelateerd artikel: Hoe HashMap intern werkt in Java.

dit artikel is geschreven door Gaurav Miglani. Als je GeeksforGeeks leuk vindt en wil bijdragen, kun je ook een artikel schrijven met bijdragen.geeksforgeeks.org of mail uw artikel naar [email protected]. zie uw artikel verschijnen op de GeeksforGeeks hoofdpagina en help andere Geeks.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.