Januar 19, 2022

Java hungrig

In Core Java Interview Fragen , ist es üblich, mit Sammlung Framework Fragen bombardiert zu werden . Ich wurde in Goldman Sachs interviewt , und dort stellten sie eine Frage, wo ich sprachlos wurde . Der Interviewer fragte, wie Sie Set in Java implementieren, dh internes Arbeiten von Hashset oder Wie hashset in Java funktioniert. Das heißt, wie wird sichergestellt, dass jedes Element eindeutig ist, ohne Set Interfaces oder Klassen zu verwenden, die Set Interface implementieren.
Lesen Sie auch: Wie Hash Map in Java funktioniert
Ich habe die Antwort gegeben, obwohl auch in der Interviewrunde , aber die Antwort ist alles andere als zufriedenstellend .
Also kam ich zurück nach Hause und recherchierte . Also habe ich endlich die Antwort bekommen und sie mit dir geteilt .

 Wie HashSet intern in Java funktioniert

Set Implementierung Intern in Java
Jedes Element in der Menge ist einzigartig . Damit es kein doppeltes Element im Set gibt.
Wenn wir also in Java Elemente in die Menge einfügen möchten, schreiben wir Code wie diesen

public class JavaHungry { public static void main(String args) { // TODO Automatisch generierte Methode stub HashSet<Object> hashset = new HashSet<Object>(); hashset.hinzufügen(3); hashset.hinzufügen("Java Hungrig"); hashset.hinzufügen("Blogspot"); System.aus.println("Set ist "+hashset); }}

Es wird das Ergebnis drucken : Set ist
Fügen Sie nun ein doppeltes Element im obigen Code hinzu

public class JavaHungry { public static void main(String args) { HashSet<Object> hashset = new HashSet<Object>(); hashset .hinzufügen(3); hashset.hinzufügen("Java Hungrig"); hashset.hinzufügen("Blogspot"); hashset.add(3); // doppelte Elemente hashset.add("Java Hungry"); // doppelte Elemente System.aus.println("Set ist "+hashset); }}

Es wird das Ergebnis drucken : Set is
Nun , was intern passiert, wenn Sie doppelte Elemente in der add() -Methode des Set-Objekts übergeben , wird false zurückgegeben und nicht zum HashSet hinzugefügt , da das Element bereits vorhanden ist .So weit so gut .
Aber das Hauptproblem entsteht, wie es falsch zurückgibt. Also hier ist die Antwort
Wenn Sie die HashSet Implementierung der add() Methode in Java Apis öffnen, die ist rt.jar , Sie werden den folgenden Code darin finden

public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serialisierbar{ private transiente HashMap<E,Object> map; // Dummy-Wert, der einem Objekt in der Hintergrundkarte zugeordnet werden soll privates statisches endgültiges Objekt PRESENT = new Object(); public HashSet() { map = new HashMap<>(); } // EINIGE CODE ,dh Andere Methoden in Hash Set public boolean add(E e) { return map .put(e, PRESENT)==null; } // EIN CODE, dh Andere Methoden im Hash-Set}

Wir erreichen also eine Eindeutigkeit im Set, intern in Java durch HashMap . Wenn Sie ein Objekt von HashSet erstellen, wird ein Objekt von HashMap erstellt, wie Sie in den kursiven Zeilen im obigen Code sehen können.
Wir haben bereits besprochen, wie HashMap intern in Java funktioniert .
Wie wir in HashMap wissen, ist jeder Schlüssel eindeutig . Also, was wir in der Menge tun, ist, dass wir das Argument in der add(Element E) übergeben, das E als Schlüssel in der HashMap ist. Jetzt müssen wir dem Schlüssel einen Wert zuordnen, also hat der Java-APIS-Entwickler den Dummy-Wert ( new Object () ) übergeben, auf den durch die Objektreferenz verwiesen wird.
Also, eigentlich, wenn Sie eine Zeile in HashSet wie hashset hinzufügen.add(3) Was Java intern tut, ist, dass es dieses Element E – 3 als Schlüssel in die HashMap einfügt (die während der Erstellung des HashSet-Objekts erstellt wurde) und ein Dummy-Wert, der das Objekt des Objekts ist, als Wert an den Schlüssel übergeben wird .
Wenn Sie nun den Code der HashMap-Methode put(Key k,Value V) sehen, finden Sie Folgendes
public V put(K key, V value) {
//Some code
}
Der wichtigste Punkt im obigen Code ist, dass put (key,value)
1 zurückgibt. null , wenn der Schlüssel eindeutig ist und zur Karte hinzugefügt wird
2. Alter Wert des Schlüssels , wenn der Schlüssel doppelt ist
Also , in HashSet add() Methode , wir überprüfen den Rückgabewert von map.put(key,value) Methode mit Nullwert
dh
public boolean add(E e) {
return map .put(e, VORHANDEN)==null;

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.