GeeksforGeeks

ponieważ wiemy, że zestaw jest dobrze zdefiniowanym zbiorem różnych obiektów. Każdy element zbioru nazywany jest elementem zbioru. Innymi słowy, możemy powiedzieć, że zbiór nigdy nie będzie zawierał zduplikowanych elementów. Ale jak w Javie Set interface zaimplementowane klasy jak HashSet, LinkedHashSet, TreeSet itp. osiągnąć tę wyjątkowość. W tym poście omówimy ukrytą prawdę stojącą za tą wyjątkowością.

jak HashSet działa wewnętrznie w Javie?

Uwaga czytelniku! Nie przestawaj się uczyć. Zdobądź wszystkie ważne koncepcje Java Foundation i Collections dzięki kursowi Fundamentals of Java i Java Collections w przyjaznej cenie dla studentów i przygotuj się na branżę. Aby ukończyć przygotowanie od nauki języka do DS Algo i wielu innych, zapoznaj się z kompletnym kursem przygotowującym do rozmowy kwalifikacyjnej.

jak Set / HashSet działa wewnętrznie w Javie
zrozumiemy to na przykładzie.Zobaczmy wyjście następującego programu, który próbuje dodać zduplikowane elementy w zestawie Hashsetów.

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);
}
}



wyjście:

b1 = trueb2 = trueb3 = false

teraz z wyjścia jest jasne, że kiedy próbujemy dodać zduplikowany element do zestawu za pomocą metody add (), zwraca on false, a element nie jest dodawany do hashsetu, ponieważ jest już obecny. Teraz pojawia się pytanie, w jaki sposób Metoda add() sprawdza, czy zestaw zawiera już określony element, czy nie. Będzie to bardziej jasne, jeśli przyjrzymy się bliżej metodzie add () i domyślnemu konstruktorowi w klasie 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}

teraz, jak widać, za każdym razem, gdy tworzymy HashSet, tworzy on wewnętrznie Hashmapę i jeśli wstawimy element do tego Hashsetu za pomocą metody add (), w rzeczywistości wywoła metodę put () na wewnętrznie utworzonym obiekcie HashMap z elementem, który podałeś jako klucz, a stałym obiektem o nazwie „PRESENT” jako jego wartością. Możemy więc powiedzieć, że zbiór osiąga unikalność wewnętrznie poprzez HashMap. Teraz cała historia dotyczy tego, jak wewnętrznie działa metoda HashMap I put ().

jak wiemy w Hashmapie każdy klucz jest unikalny i kiedy wywołujemy metodę put(Key, Value), zwraca ona poprzednią wartość powiązaną z key lub null, jeśli nie było mapowania dla key. Tak więc w metodzie add () sprawdzamy zwracaną wartość map.metoda put (key, value) z wartością null.

  1. jeśli Mapa.put (key, value) zwraca null, następnie polecenie „map.put (e, PRESENT) == null ” zwróci true i element zostanie dodany do Hashsetu (wewnętrznie HashMap).
  2. jeśli Mapa.put (key, value) zwraca starą wartość klucza, następnie polecenie „map.put (e, PRESENT) == null ” zwróci false i element nie zostanie dodany do Hashsetu (wewnętrznie HashMap).

jako LinkedHashSet rozszerza HashSet, więc wewnętrznie wywołuje konstruktory HashSet używając super(). Podobnie utworzenie obiektu klasy TreeSet wewnętrznie tworzy obiekt mapy nawigacyjnej jako mapę zapasową.

powiązany artykuł: Jak działa HashMap w Javie.

Jeśli podoba Ci się GeeksforGeeks i chciałbyś przyczynić się, możesz również napisać artykuł za pomocą contribute.geeksforgeeks.org lub wyślij swój artykuł do [email protected]. Zobacz swój artykuł pojawiający się na stronie głównej GeeksforGeeks i pomóż innym maniakom.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.