GeeksforGeeks

mivel tudjuk, hogy a halmaz különálló objektumok jól definiált gyűjteménye. A halmaz minden tagját a halmaz elemének nevezzük. Tehát más szavakkal azt mondhatjuk, hogy egy készlet soha nem tartalmaz ismétlődő elemeket. De hogyan java set interface végre osztályok, mint a HashSet, LinkedHashSet, TreeSet stb. érje el ezt az egyediséget. Ebben a bejegyzésben megvitatjuk az egyediség mögött rejlő rejtett igazságot.

hogyan működik a HashSet belsőleg a Java – ban?

figyelem olvasó! Ne hagyja abba a tanulást most. Szerezd meg az összes fontos Java Alapítvány és gyűjtemény koncepciókat a Java és a Java gyűjtemények alapjaival egy diákbarát áron, és készen áll az iparra. Ahhoz, hogy befejezze a felkészülést a nyelvtanulástól a DS Algo-ig és még sok másig, kérjük, olvassa el a teljes interjú előkészítő tanfolyamot.

hogyan működik a Set / HashSet belsőleg a Java-ban
ezt egy példával fogjuk megérteni.Lássuk a következő program kimenetét, amely megpróbál duplikált elemeket hozzáadni egy Hashsetbe.

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



kimenet:

b1 = trueb2 = trueb3 = false

most a kimenet, akkor egyértelmű, hogy amikor megpróbálunk hozzáadni egy ismétlődő elem egy sor add() metódus, visszaadja false, és az elem nem adunk hashset, mivel ez már jelen van. Most jön a kérdés, hogy az add() metódus ellenőrzi, hogy a készlet már tartalmazza-e a megadott elemet vagy sem. Egyértelműbb lesz, ha közelebbről megvizsgáljuk az add() metódust és az alapértelmezett konstruktort a HashSet osztályban.

// 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}

most, mint látható, hogy amikor létrehozunk egy HashSet, belsőleg létrehoz egy HashMap és ha beszúrunk egy elemet ebbe HashSet segítségével add() módszer, hogy valójában hívja put() módszer belsőleg létrehozott HashMap objektum elem van megadva, mint ez a kulcs és állandó objektum úgynevezett “jelen”, mint ez az érték. Tehát azt mondhatjuk, hogy egy készlet a HashMap segítségével belsőleg eléri az egyediséget. Most az egész történet arról szól, hogy a HashMap and put() metódus hogyan működik belsőleg.

mint tudjuk, a HashMap minden kulcs egyedi, és amikor hívjuk put (Key, Value) metódus, visszaadja az előző értéket társított kulcs, vagy null, ha nem volt leképezés kulcs. Tehát az add () metódusban ellenőrizzük a map visszatérési értékét.put (kulcs, érték) módszer null értékkel.

  1. ha térkép.a put (kulcs, érték) null értéket ad vissza, majd a “térkép.put (e, PRESENT) = = null ” visszatér true és elem hozzáadódik a HashSet(belsőleg HashMap).
  2. ha térkép.a put (key, value) a kulcs régi értékét adja vissza, majd a “map.put(e, PRESENT) == null” false értéket ad vissza, és az elem nem kerül hozzáadásra a Hashsethez (belsőleg HashMap).

mivel a LinkedHashSet kiterjeszti a HashSet-et, így belsőleg meghívja a HashSet konstruktorait a super () használatával. Hasonlóképpen egy objektum létrehozása TreeSet osztály belsőleg létrehozza a hajózható Térkép objektumát háttértérképként.

kapcsolódó cikk : Hogyan működik a HashMap belsőleg a Java-ban.

ez a cikk hozzájárult Gaurav Miglani. Ha tetszik a GeeksforGeeks, és szeretne hozzájárulni, akkor is írhat egy cikket a hozzájárulás használatával.geeksforgeeks.org vagy küldje el a cikket [email protected]. lásd a GeeksforGeeks főoldalán megjelenő cikket, és segítsen más geekeknek.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.