Gennaio 19, 2022

Java Hungry

Nelle domande di intervista java di base , è comune essere bombardati da domande di framework di raccolta . Sono stato intervistato a Goldman Sachs, e lì hanno fatto una domanda in cui sono rimasto sbalordito . L’intervistatore ha chiesto Come si implementa Set in Java in altre parole il funzionamento interno di Hashset o Come funziona hashset in java. Cioè, come farà in modo che ogni elemento sia unico senza utilizzare le interfacce o le classi Set che implementano l’interfaccia Set .
Leggi anche : Come funziona hash map in java
Ho dato la risposta , anche se ho qualificato anche l’intervista , ma la risposta è tutt’altro che soddisfacente .
Così sono tornato a casa e fare qualche ricerca . Così finalmente ho ottenuto la risposta e condividere con voi .

Come HashSet funziona internamente in java

Imposta implementazione internamente in Java
Ogni elemento nel set è unico . In modo che non ci sia alcun elemento duplicato nel set .
Quindi in java se vogliamo aggiungere elementi nel set, scriviamo codice come questo

public class JavaHungry { public static void main(String args) { // TODO Auto-generated method stub HashSet< Object>hashset = new HashSet< Object > (); hashset.aggiungi (3); hashset.aggiungi ("Java Hungry"); hashset.aggiungi ("Blogspot"); Sistema.fuori.println ("Set è" + hashset); }}

Stamperà il risultato : Set is
Ora lascia aggiungere un elemento duplicato nel codice precedente

public class JavaHungry { public static void main(String args) { HashSet< Object>hashset = new HashSet< Object > (); hashset.aggiungi (3); hashset.aggiungi ("Java Hungry"); hashset.aggiungi ("Blogspot"); hashset.aggiungi (3); // elementi duplicati hashset.aggiungi ("Java Hungry"); / / Sistema di elementi duplicati.fuori.println ("Set è" + hashset); }}

Stamperà il risultato : Set è
Ora, cosa succede internamente quando passi elementi duplicati nel metodo add () dell’oggetto Set , Restituirà false e non aggiungerà all’HashSet , poiché l’elemento è già presente .Finora tutto bene .
Ma il problema principale sorge che come restituisce false . Quindi ecco la risposta
Quando apri l’implementazione HashSet del metodo add () nelle api Java che è rt.jar , troverai il seguente codice in esso

 HashSet di classe pubblica<E > estende AbstractSet<E>implementa Set< E>, Clonabile, java.io.Serializable {private transient HashMap<E, Object > map; / / Valore fittizio da associare a un Oggetto nella mappa di supporto Oggetto finale statico privato PRESENT = new Object (); public HashSet () { map = new HashMap<>(); } // UN PO ' DI CODICE, cioè Altri metodi in Hash Set public boolean add (E e) {return map.put (e, PRESENT)= = null;} / / UN PO ' DI CODICE, cioè Altri metodi nel set di Hash}

Quindi, stiamo raggiungendo l’unicità in Set, internamente in java attraverso HashMap . Ogni volta che crei un oggetto di HashSet creerà un oggetto di HashMap come puoi vedere nelle righe in corsivo nel codice sopra .
Abbiamo già discusso Come HashMap funziona internamente in java .
Come sappiamo in HashMap ogni chiave è unica . Quindi quello che facciamo nel set è che passiamo l’argomento nell’add(Elemene E) che è E come chiave nella HashMap . Ora abbiamo bisogno di associare un valore alla chiave , quindi ciò che Java apis developer ha fatto è passare il valore fittizio che è ( new Object () ) a cui si riferisce il riferimento all’oggetto PRESENTE .
Quindi, in realtà quando si aggiunge una riga in HashSet come hashset.add (3) ciò che java fa internamente è che metterà quell’elemento E qui 3 come chiave nella HashMap(creata durante la creazione dell’oggetto HashSet) e un valore fittizio che è l’oggetto dell’oggetto viene passato come valore alla chiave .
Ora se vedi il codice del metodo HashMap put(Key k,Value V), troverai qualcosa del genere
public V put(K key, V value) {
//Some code
}
Il punto principale da notare nel codice precedente è che put (key,value) restituirà
1. null, se la chiave è unica e aggiunta alla mappa
2. Vecchio valore della chiave, se la chiave è duplicata
Quindi, nel metodo HashSet add (), controlliamo il valore restituito di map.metodo put (key, value) con valore null
cioè
public boolean add (E e) {
return map.put (e, PRESENTE)= = null;

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.