GeeksforGeeks

după cum știm că un set este o colecție bine definită de obiecte distincte. Fiecare membru al unui set este numit element al setului. Deci, cu alte cuvinte, putem spune că un set nu va conține niciodată elemente duplicate. Dar cum în java set interface au fost implementate clase precum HashSet, LinkedHashSet, TreeSet etc. realizați această unicitate. În această postare, vom discuta adevărul ascuns din spatele acestei unicități.

cum funcționează HashSet intern în Java?

cititor de atenție! Nu te opri din învățat acum. Faceți rost de toate conceptele importante de fundație și colecții Java cu fundamentele cursului Java și Java Collections la un preț prietenos pentru studenți și deveniți gata pentru industrie. Pentru a finaliza pregătirea dvs. de la învățarea unei limbi la DS Algo și multe altele, vă rugăm să consultați cursul complet de pregătire a interviului.

cum Set / HashSet funcționează intern în Java
vom înțelege acest lucru cu un exemplu.Să vedem ieșirea următorului program care încearcă să adauge elemente duplicate într-un 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);
}
}



ieșire:

b1 = trueb2 = trueb3 = false

acum, din ieșire, este clar că atunci când încercăm să adăugăm un element duplicat la un set folosind metoda add (), acesta returnează false, iar elementul nu este adăugat la hashset, deoarece este deja prezent. Acum vine întrebarea, cum metoda add () verifică dacă setul conține deja elementul specificat sau nu. Acesta va fi mai clar dacă avem o privire mai atentă pe add() metoda și constructorul implicit în clasa HashSet.

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

acum, după cum puteți vedea că ori de câte ori vom crea un HashSet, se creează pe plan intern un HashMap și dacă vom insera un element în acest HashSet folosind add() metoda, de fapt apel pune() metoda pe obiect HashMap creat pe plan intern cu element ați specificat ca este obiect cheie și constantă numit „prezent” ca valoare. Deci, putem spune că un Set atinge unicitatea intern prin HashMap. Acum, întreaga poveste vine în jurul valorii de modul în care o metodă HashMap și put() funcționează intern.

după cum știm într-un HashMap, fiecare cheie este unică și când apelăm metoda put(cheie, valoare), returnează valoarea anterioară asociată cu cheia sau null dacă nu a existat nicio mapare pentru cheie. Deci, în add () metoda vom verifica valoarea returnată a hărții.metoda put (cheie, valoare) cu valoare nulă.

  1. dacă hartă.pune (cheie, valoare) returnează null, apoi declarația „hartă.pune (E, prezent) = = null” va reveni adevărat și elementul este adăugat la HashSet(HashMap intern).
  2. dacă hartă.pune (cheie, valoare) returnează valoarea veche a cheii, apoi declarația „hartă.pune (E, prezent) = = null” va reveni false și elementul nu este adăugat la HashSet(HashMap intern).

ca LinkedHashSet extinde HashSet, așa că solicită intern constructori de HashSet folosind super(). În mod similar, crearea unui obiect din clasa TreeSet creează intern obiectul hărții navigabile ca hartă Suport.

articol înrudit : cum funcționează HashMap intern în Java.

acest articol este contribuit de Gaurav Miglani. Dacă vă place GeeksforGeeks și ar dori să contribuie, puteți scrie, de asemenea, un articol folosind contribuie.tocilari.org sau mail articolul dumneavoastră la [email protected]. vedeți articolul dvs. care apare pe pagina principală GeeksforGeeks și ajutați alți Geeks.

Lasă un răspuns

Adresa ta de email nu va fi publicată.