GeeksforGeeks

som vi vet at et sett er en veldefinert samling av forskjellige objekter. Hvert medlem av et sett kalles et element av settet. Så med andre ord kan vi si at et sett aldri vil inneholde dupliserte elementer. Men hvordan i java Sett grensesnitt implementert klasser Som HashSet, LinkedHashSet, TreeSet etc. oppnå denne unikheten. I dette innlegget vil vi diskutere den skjulte sannheten bak denne unike.

Hvordan HashSet fungerer internt I Java?

Oppmerksomhetsleser! Ikke slutt å lære nå. Få tak i alle De viktige Java Foundation og Samlinger konsepter Med Grunnleggende Java Og Java Samlinger Kurs på en student-vennlig pris og bli industri klar. For å fullføre forberedelsen fra å lære et språk TIL DS Algo og mange flere, vennligst se Komplett Intervjuforberedelseskurs.

Hvordan Set / HashSet fungerer internt I Java
vi vil forstå dette med et eksempel.La oss se resultatet av følgende program som prøver å legge til dupliserte elementer i Et 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);
}
}



Utgang:

b1 = trueb2 = trueb3 = false

Nå fra utgangen er det klart at når vi prøver å legge til et duplikatelement i et sett ved hjelp av add () – metoden, returnerer det false, og element er ikke lagt til hashset, som det allerede er til stede. Nå kommer spørsmålet, hvordan add () – metoden kontrollerer om settet allerede inneholder det angitte elementet eller ikke. Det vil være tydeligere om vi ser nærmere på add () – metoden og standardkonstruktøren i HashSet-klassen.

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

nå som du kan se at når vi lager Et HashSet, oppretter det internt En HashMap, og hvis vi setter inn et element i Dette HashSet ved hjelp av add () – metoden, kaller det faktisk put () – metoden på internt opprettet HashMap-objekt med element du har angitt som det er nøkkel og konstant Objekt kalt «PRESENT» som det er verdi. Så vi kan si at Et Sett oppnår unikhet internt gjennom HashMap. Nå kommer hele historien rundt hvordan En HashMap og put () – metode internt fungerer.

som vi vet i En HashMap, er hver nøkkel unik, og når vi kaller put (Key, Value) – metoden, returnerer den forrige verdien som er knyttet til key, eller null hvis det ikke var noen tilordning for key. Så i add () – metoden sjekker vi returverdien til kart.sett (nøkkel, verdi) metode med null verdi.

  1. hvis kart.put (nøkkel, verdi) returnerer null, deretter setningen » kart.put (e, PRESENT) = = null » vil returnere true og element legges Til HashSet (internt HashMap).
  2. hvis kart.put (nøkkel, verdi) returnerer gammel verdi av nøkkelen, deretter setningen » kart.put (e, PRESENT) = = null » vil returnere false og element er ikke lagt Til HashSet (internt HashMap).

Som LinkedHashSet utvider HashSet, så kaller det internt konstruktører Av HashSet ved hjelp av super (). På samme måte skaper et Objekt Av TreeSet klasse internt objekt Av Navigable Kart som backing kart.

Relatert Artikkel: Hvordan HashMap internt fungerer I Java.

Denne artikkelen er bidratt Av Gaurav Miglani. Hvis Du liker GeeksforGeeks og ønsker å bidra, kan du også skrive en artikkel ved hjelp av contribute.geeksforgleder.org eller send artikkelen din til [email protected]. Se artikkelen din vises på GeeksforGeeks hovedside og hjelpe andre Geeks.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.