Geeksborgeeks

kuten tiedämme, joukko on tarkoin määritelty kokoelma erillisiä olioita. Jokaista joukon jäsentä kutsutaan joukon elementiksi. Joten toisin sanoen, voimme sanoa, että joukko ei koskaan sisällä päällekkäisiä elementtejä. Mutta miten java Set käyttöliittymä toteutetaan luokat kuten HashSet, Linkedhasset, TreeSet jne. saavuttaa tämä ainutlaatuisuus. Tässä viestissä keskustelemme piilotetusta totuudesta tämän ainutlaatuisuuden takana.

miten HashSet toimii sisäisesti Jaavalla?

huomio lukija! Älä lopeta oppimista nyt. Hanki käsiinsä kaikki tärkeät Java Foundation ja kokoelmat konseptit Fundamentals of Java ja Java Collections Course opiskelijaystävälliseen hintaan ja tulla teollisuuden valmis. Viimeistele valmistautumisesi kielen oppimisesta DS Algoon ja moniin muihin, Katso täydellinen haastatteluun valmistava kurssi.

miten Set/HashSet toimii sisäisesti Java
ymmärrämme tämän esimerkin avulla.Katsotaanpa tuotos seuraavan ohjelman, joka yrittää lisätä päällekkäisiä elementtejä 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);
}
}



tuloste:

b1 = trueb2 = trueb3 = false

nyt tulosteesta, on selvää, että kun yritämme lisätä kaksoiskappaleen joukko lisää() menetelmällä, se palauttaa false, ja elementti ei lisätä hashset, koska se on jo läsnä. Nyt tulee kysymys, miten add () – menetelmä tarkistaa, sisältääkö joukko jo määritetyn elementin vai ei. Se on selvempää, jos meillä on lähempää tarkastelua add () – menetelmä ja oletuskonstruktori HashSet-luokassa.

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

nyt kun näet, että aina kun luomme Hajautussetin, se luo sisäisesti Hashmapin ja jos lisäämme elementin tähän Hajautussarjaan add () – menetelmällä, se itse asiassa kutsuu put () – menetelmää sisäisesti luodulle HashMap-objektille, jonka elementin olet määrittänyt sen avaimeksi ja vakioobjektin nimeltä ”PRESENT” sen arvoksi. Voimme siis sanoa, että joukko saavuttaa ainutlaatuisuuden sisäisesti Hashmapin avulla. Nyt koko tarina tulee noin miten HashMap ja put () menetelmä sisäisesti toimii.

kuten tiedämme Hashmapissa, jokainen avain on ainutlaatuinen ja kun kutsumme put(avain, arvo) – menetelmää, se palauttaa edellisen avaimen arvon tai nollin, jos avaimelle ei ollut kartoitusta. Joten lisää () – menetelmässä tarkistamme kartan palautusarvon.put (avain, arvo) – menetelmä, jonka arvo on nolla.

  1. If-kartta.put (avain, arvo) palauttaa null, sitten lauseke ”kartta.put(e, PRESENT) == null” palauttaa true ja elementti lisätään HashSet (sisäisesti HashMap).
  2. If-kartta.put (avain, arvo) palauttaa avaimen vanhan arvon, sitten lauseke ”kartta.put (e, PRESENT) = = null” palauttaa false ja elementti ei lisätä HashSet(sisäisesti HashMap).

LinkedHashSet laajentaa Hashsetin, joten se kutsuu sisäisesti Hashsetin rakentajia käyttämällä Superia (). Vastaavasti TreeSet-luokan objektin luominen sisäisesti luo navigoitavan kartan kohteen taustakarttana.

Related Article : How HashMap sisäisesti works in Java.

tämän artikkelin on toimittanut Gaurav Miglani. Jos pidät GeeksforGeeks ja haluat osallistua, voit myös kirjoittaa artikkelin käyttäen contribute.nörttejä.org tai lähetä artikkelisi osoitteeseen [email protected]. katso artikkeli esiintyy GeeksforGeeks pääsivulla ja auttaa muita nörttejä.

Vastaa

Sähköpostiosoitettasi ei julkaista.