GeeksforGeeks

Come sappiamo che un set è una raccolta ben definita di oggetti distinti. Ogni membro di un set è chiamato un elemento del set. Quindi, in altre parole, possiamo dire che un set non conterrà mai elementi duplicati. Ma come nell’interfaccia java Set implementate classi come HashSet, LinkedHashSet,TreeSet ecc. raggiungere questa unicità. In questo post, discuteremo la verità nascosta dietro questa unicità.

Come HashSet funziona internamente in Java?

Lettore di attenzione! Non smettere di imparare ora. Entra in possesso di tutti gli importanti concetti di Java Foundation e Collections con i fondamenti del corso Java e Java Collections ad un prezzo adatto agli studenti e diventa pronto per l’industria. Per completare la vostra preparazione da imparare una lingua per DS Algo e molti altri, si prega di fare riferimento Corso di preparazione intervista completa.

Come Set / HashSet funziona internamente in Java
Lo capiremo con un esempio.Vediamo l’output del seguente programma che tenta di aggiungere elementi duplicati in 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);
}
}



Uscita:

b1 = trueb2 = trueb3 = false

Ora dall’output, è chiaro che quando proviamo ad aggiungere un elemento duplicato a un set usando il metodo add (), restituisce false e l’elemento non viene aggiunto a hashset, poiché è già presente. Ora arriva la domanda, come il metodo add () controlla se il set contiene già l’elemento specificato o meno. Sarà più chiaro se diamo un’occhiata più da vicino al metodo add() e al costruttore predefinito nella classe 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}

Ora, come puoi vedere, ogni volta che creiamo un HashSet, crea internamente una HashMap e se inseriamo un elemento in questo HashSet usando il metodo add (), in realtà chiama il metodo put() sull’oggetto HashMap creato internamente con l’elemento che hai specificato come chiave e oggetto costante chiamato “PRESENTE” come valore. Quindi possiamo dire che un Set raggiunge l’unicità internamente attraverso HashMap. Ora l’intera storia viene intorno a come funziona internamente un metodo HashMap e put ().

Come sappiamo in una HashMap ogni chiave è unica e quando chiamiamo il metodo put(Key, Value), restituisce il valore precedente associato a key o null se non c’era alcuna mappatura per key. Quindi nel metodo add () controlliamo il valore di ritorno della mappa.metodo put (key, value) con valore null.

  1. Se mappa.put (key, value) restituisce null, quindi l’istruzione ” map.put (e, PRESENT) = = null” restituirà true e l’elemento viene aggiunto all’HashSet(internamente HashMap).
  2. Se mappa.put (key, value) restituisce il vecchio valore della chiave, quindi l’istruzione ” map.put (e, PRESENT) = = null” restituirà false e l’elemento non viene aggiunto all’HashSet(internamente HashMap).

Come LinkedHashSet estende HashSet, quindi chiama internamente i costruttori di HashSet usando super(). Allo stesso modo la creazione di un oggetto della classe TreeSet crea internamente l’oggetto della mappa navigabile come mappa di supporto.

Articolo correlato: Come HashMap funziona internamente in Java.

Questo articolo è contribuito da Gaurav Miglani. Se ti piace GeeksforGeeks e vorresti contribuire, puoi anche scrivere un articolo usando contribute.geeksforgeeks.org o posta il tuo articolo a [email protected]. Vedere il tuo articolo che appare sulla pagina principale GeeksforGeeks e aiutare altri Geek.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.