19 stycznia, 2022

Java Hungry

w pytaniach core java interview questions często bombarduje się pytaniami Collection framework . Byłem przesłuchiwany w Goldman Sachs, i tam zadali pytanie, Gdzie mnie oniemiało . Ankieter zapytał, jak zaimplementować Set w Javie, innymi słowy, wewnętrzne działanie Hashsetu lub jak działa hashset w Javie. Oznacza to, w jaki sposób upewni się, że każdy element jest unikalny bez użycia ustawionych interfejsów lub klas, które implementują ustawiony interfejs .
Czytaj także: jak działa hash map w Javie
dałem odpowiedź, choć kwalifikuję się również do rundy kwalifikacyjnej, ale odpowiedź jest daleka od satysfakcjonującej .
więc wróciłem do domu i poszperałem trochę . Więc w końcu dostałem odpowiedź i podzieliłem się nią z Tobą .

jak HashSet działa wewnętrznie w Javie

implementacja Set wewnętrznie w Javie
każdy element w zestawie jest unikalny . Tak, że nie ma duplikatu elementu w zbiorze .
więc w Javie jeśli chcemy dodać elementy do zestawu to piszemy kod w następujący sposób

public class JavaHungry { public static void main(String args) { // TODO automatycznie wygenerowana metoda stub HashSet< Object>hashset = new HashSet< Object> (); hashset.add (3); hashset.add ("Java Hungry"); hashset.add ("Blogspot"); System.Wynocha.println ("Set is" +hashset); }}

wydrukuje wynik : Ustaw to
teraz dodajmy zduplikowany element w powyższym kodzie

public class JavaHungry { public static void main(String args) { HashSet<Object> hashset = new HashSet<Object>(); hashset.add (3); hashset.add ("Java Hungry"); hashset.add ("Blogspot"); hashset.add (3); / / duplicate elements hashset.add ("Java Hungry"); / / duplicate elements System.Wynocha.println ("Set is" +hashset); }}

wydrukuje wynik : Set to
teraz, co dzieje się wewnętrznie, gdy przekażesz zduplikowane elementy w metodzie add() obiektu Set, zwróci false i nie doda do Hashsetu, ponieważ element jest już obecny. na razie tak dobrze .
ale główny problem pojawia się, że jak zwraca false . Oto odpowiedź
po otwarciu implementacji HashSet metody add () w Java API, która jest rt.jar , znajdziesz w nim następujący kod

public class HashSet< E> extends Abstractsset< E> implements Set< e>, Cloneable, java.io.Serializable{ private transient HashMap< e,Object> map; / / Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object (); public HashSet () {map = new HashMap<>(); } // jakiś kod, tzn. Inne metody w Hash Set public boolean add (E e) { return map.put (e, PRESENT)= = null;} / / jakiś kod, tzn. Inne metody w zestawie Hash}

tak więc, osiągamy wyjątkowość W Set, wewnętrznie w Javie poprzez HashMap . Za każdym razem, gdy tworzysz obiekt HashSet, tworzy on obiekt HashMap, jak widać kursywą w powyższym kodzie .
omówiliśmy już, jak HashMap działa wewnętrznie w Javie .
jak wiemy w HashMap każdy klucz jest unikalny . Więc to, co robimy w zbiorze, to to, że przekazujemy argument w add (Elemene E), który jest E jako klucz w Hashmapie . Teraz musimy powiązać jakąś wartość z kluczem, więc programista Java API przekazał fałszywą wartość, którą jest (new Object ()), do której odnosi się obecne odniesienie do obiektu.
tak więc , w rzeczywistości, gdy dodajesz linię w HashSet, taką jak hashset.add (3) to, co java robi wewnętrznie, to to, że umieści ten element e tutaj 3 jako klucz w Hashmapie(utworzony podczas tworzenia obiektu HashSet), a pewna wartość atrapy, która jest obiektem obiektu, zostanie przekazana jako wartość do klucza .
teraz, jeśli widzisz kod metody HashMap put(Key k,Value V), znajdziesz coś takiego
public V put(K key, V value) {
//jakiś kod
}
głównym punktem,na który należy zwrócić uwagę w powyższym kodzie jest to, że put (key, value) zwróci
1. null, jeśli klucz jest unikalny i dodany do mapy
2. Stara wartość klucza, jeśli klucz jest duplikowany
, więc w metodzie HashSet add() sprawdzamy zwracaną wartość map.metoda put(key,value) o wartości null
tzn.
public boolean add (E e) {
return map.put (e, PRESENT)= = null;

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.