protože víme, že sada je dobře definovaná sbírka odlišných objektů. Každý člen sady se nazývá prvek sady. Jinými slovy, můžeme říci, že sada nikdy nebude obsahovat duplicitní prvky. Ale jak v java Set interface implementovány třídy jako HashSet, LinkedHashSet, TreeSet atd. dosáhněte této jedinečnosti. V tomto příspěvku budeme diskutovat o skryté pravdě za touto jedinečností.
jak HashSet funguje interně v Javě?
pozor čtenář! Nepřestávej se učit. Získejte všechny důležité koncepty Java Foundation a Collections se základy kurzu Java a Java Collections za studentskou cenu a připravte se na průmysl. Chcete-li dokončit přípravu od učení jazyka po DS Algo a mnoho dalších, přečtěte si kompletní přípravný kurz na pohovor.
to pochopíme na příkladu.Podívejme se na výstup následujícího programu, který se snaží přidat duplicitní prvky v 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);
}
}
výstup:
b1 = trueb2 = trueb3 = false
nyní z výstupu je zřejmé, že když se pokusíme přidat duplicitní prvek do sady pomocí metody add (), vrátí false a prvek není přidán do hashset, protože je již přítomen. Nyní přichází otázka, jak metoda add () kontroluje, zda sada již obsahuje zadaný prvek nebo ne. Bude jasnější, pokud se blíže podíváme na metodu add() a výchozí konstruktor ve třídě 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}
nyní můžete vidět, že kdykoli vytvoříme HashSet, interně vytvoří HashMap a pokud vložíme prvek do této HashSet pomocí metody add (), ve skutečnosti zavolá metodu put () na interně vytvořený objekt HashMap s prvkem, který jste zadali jako klíč a konstantní objekt nazvaný „přítomen“ jako jeho hodnota. Můžeme tedy říci, že sada dosahuje jedinečnosti interně prostřednictvím HashMap. Nyní celý příběh přichází o tom, jak interně funguje metoda HashMap a put ().
jak víme v Hashmapu, každý klíč je jedinečný a když zavoláme metodu put (klíč, hodnota), vrátí předchozí hodnotu spojenou s klíčem nebo null, pokud pro klíč nebylo mapování. V metodě add() tedy zkontrolujeme návratovou hodnotu mapy.metoda put (klíč, hodnota) s hodnotou null.
- pokud mapa.put (klíč, hodnota) vrací null, pak příkaz “ mapa.put (e, PRESENT) = = null “ vrátí true a prvek je přidán do HashSet (interně HashMap).
- pokud mapa.put (klíč, hodnota) vrátí starou hodnotu klíče a poté příkaz “ mapa.put (e, PRESENT) = = null “ vrátí false a prvek není přidán do HashSet (interně HashMap).
jako LinkedHashSet rozšiřuje HashSet, takže interně volá konstruktory HashSet pomocí super(). Podobně vytvoření objektu třídy TreeSet interně vytvoří objekt splavné mapy jako podkladovou mapu.
související článek: Jak HashMap interně funguje v Javě.
tento článek je přispěl Gaurav Miglani. Pokud máte rádi GeeksforGeeks a chtěli byste Přispět, můžete také napsat článek pomocí contribute.geeksforgeeks.org nebo pošlete svůj článek na adresu [email protected]. podívejte se na svůj článek zobrazený na hlavní stránce GeeksforGeeks a pomozte ostatním geekům.