Tech oktatóanyagok

ebben a bejegyzésben meglátjuk, hogyan működik a HashSet belsőleg a Java-ban, ami szintén favoritejava gyűjtemények interjúkérdés, de mielőtt a Hashset belső megvalósításába lépne a Java-ban, fontos tudni két pontot a HashSet-ről.

  1. a Java HashSet csak egyedi értékeket tárol, azaz nem engedélyezettek másolatok.
  2. a HashSet ugyanúgy működik a hash fogalmán, mint a HashMap a Java-ban, de működése a következő módon különbözik a HashMap-től –
    • HashMap-ben hozzáadunk egy (kulcs, érték) párt, és a hash függvényt kulcs segítségével számítjuk ki.
    • ahol a HashSet hash függvényt maga az érték felhasználásával számítják ki. Megjegyezzük, hogy a HashSet wehave add (E e) módszer, amely úgy csak az elemet kell hozzáadni paraméterként.

    is lehet, hogy kitalálta már, mivel hash függvény segítségével számítjuk érték ezért csak uniquevalues tárolja a HashSet. Ha újra megpróbálja tárolni ugyanazt az elemet, akkor a számított hash függvény ugyanaz lesz, így az elem felülíródik.

HashSet belsőleg használja HashMap

most jön vissza a belső végrehajtása HashSet Java a legfontosabb pont HashSet osztály végrehajtása belsőleg használja HashMap tárolni ez elemeit.

a HashSet-en belül sok konstruktor van, egy paraméter nélküli, Több pedig kezdeti kapacitással vagy terhelési tényezővel, de mindegyik konstruktor létrehoz egy HashMap-ot.Mivel a HashSet belsőleg használja a HashMap-ot, így a HashMap belső működésének ismerete a Java-ban segít megérteni, hogyan működik a HashSet belsőleg a Java-ban.

HashSet Constructor snippets

a Java HashSet osztályában láthatja, hogy az osztály konstruktorai létrehoznak egy HashMap-ot.

/*** Constructs a new, empty set; the backing <tt>HashMap</tt> instance has* default initial capacity (16) and load factor (0.75).*/public HashSet() { map = new HashMap<>();}
public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor);}

az értékek tárolására használt térkép pedig

private transient HashMap<E,Object> map;

a konstruktorban, ha észrevetted, vannak kezdeti kapacitás és terhelési tényező nevű paraméterek.A HashSet esetében az alapértelmezett kezdeti kapacitás 16, vagyis egy 16 hosszúságú tömb (vagy vödör) jön létre, ésaz alapértelmezett terhelési tényező 0,75. Ahol a terhelési tényező annak mértéke, hogy a hash tábla mennyire teljes, mielőtt elérhetőkapacitása automatikusan megnő.

az elemek hozzáadása – HashSet belső megvalósítás

a fenti 2.pontban kijelentettem, hogy a HashSet kiszámítja a hash függvényt magának az értéknek a felhasználásával, és nincs (kulcs, érték) pár a Hashsetben, majd jött az a kijelentés, hogy a HashSet belsőleg használja a HashMap-ot objektumok tárolására.Ez a két állítás ellentmondásosnak tűnhet, mivel a HashMap tárolja (kulcs, érték) párját, tehát nézzük meg, hogy ezek a két ellentmondó állítás igaz-e.

valójában a hashset osztály add metódusából put () a HashMap metódusát hívjuk meg, ahol az érték, amelyet hozzá kell adni a készlethez, Kulcssá válik, és egy állandó “jelen” objektumot használunk értékként.

így van meghatározva a jelen a HashSet megvalósításában-

// Dummy value to associate with an Object in the backing Mapprivate static final Object PRESENT = new Object();

így valósul meg az add metódus a HashSet osztályban –

public boolean add(E e) { return map.put(e, PRESENT)==null;} 

tehát a HashSet belső megvalósításában láthatja ,hogy ez egy (kulcs, érték) pár, amely valójában egyre added.It csak a tényleges érték (amely hozzáadódik a Hashsethez) lesz a kulcs, és egy “PRESENT” dummy érték kerül hozzáadásra értékként, amikor a háttér HashMap-ben tárolja.

például egy utasítás egy elem hozzáadásához a HashSet-készlethez.add (“Mumbai”); belsőleg lefordítja térkép.tesz (“Mumbai”, jelen); majd hozzáadta a hátsó HashMap példányhoz.

itt meg kell jegyezni, hogy a HashMap érték duplikált lehet, de a kulcsnak egyedinek kell lennie. Így Hashsetgyőződik arról, hogy csak egyedi értékeket tárolnak benne, mivel a Hashsetben tárolandó érték lesz a kulcs, miközben a HashMap-ban tárolja.

az elem eltávolítása – HashSet belső megvalósítás

amikor el kell távolítanunk egy elemet a HashSet-ből, belsőleg ismét távolítsa el a HashSetcalls remove(Object key) módszerét a HashMap.

így valósul meg a HashSet osztályban.

public boolean remove(Object o) { return map.remove(o)==PRESENT;}

itt vegye figyelembe, hogy a HashMap remove(Object key) metódusa visszaadja a kulcshoz társított értéket.Míg a HashSet remove(Object o) metódusa logikai értéket ad vissza. Azt is tudjuk, hogy minden valueadded HashSet, belsőleg, amikor hozzáadjuk a kapcsolódó HashMap, érték lesz kulcs és az érték mindig ANOBJECT nevű jelen. Ezért a HashMap remove(Object key) metódusából visszaadott érték mindig jelen van, így a feltételtérkép.távolítsa el (o) = = jelen van.

az elemek lekérése a Hashset-ből a Java-ban

a HashSet-ben nincs get módszer, amint azt a Map vagy a List biztosítja. A HashSet iterator van, amely iteratethrough az értékek a készlet. Belsőleg meg fogja hívni a HashMap kulcskészletét, mivel az értékeket kulcsokként tárolják a HashMap-ban, így megkapjuk a HashSet-ben tárolt értékeket.

így iterator belsőleg végre a Hashset Java.

/*** Returns an iterator over the elements in this set. The elements* are returned in no particular order.** @return an Iterator over the elements in this set* @see ConcurrentModificationException*/public Iterator<E> iterator() { return map.keySet().iterator();}

megjegyzés

  1. a HashMap-től eltérően, ahol a hash függvényt kulcs segítségével számítják ki HashSet magát az értéket használja a hash függvény kiszámításához.
  2. mivel a hash függvény értéke alapján kerül kiszámításra, ezért csak egyedi értékeket tárol a HashSet.
  3. a HashSet belsőleg használja a HashMap-ot az elemek tárolására.
  4. amikor elemet adunk HashSet segítségével add (E e) módszer belsőleg HashSet hívások put () módszer a HashMap wherethe átadott érték az add módszer lesz kulcs a put () módszer. A “PRESENT” dummy értéket értékként adjuk áta put() módszer.

ajánlások a tanuláshoz (Udemy tanfolyamok)

  1. Java programozás mesterkurzus
  2. Java in-Depth: legyen teljes Java mérnök!
  3. Spring Framework mesterkurzus
  4. Complete Python Bootcamp tanfolyam
  5. Python Adattudomány és gépi tanulás

ez minden ebben a témában Hogyan HashSet működik belsőleg Java. Ha bármilyen kétsége vagy javaslata van, kérjük, írjon egy megjegyzést. Kösz!

kapcsolódó témák

  1. hogyan működik az ArrayList belsőleg a Java-ban
  2. hogyan működik a HashMap belsőleg a Java-ban
  3. hogyan működik a LinkedList osztály belsőleg a Java-ban
  4. LinkedHashSet Java-ban példákkal
  5. TreeSet Java-ban példákkal

Ön is kedvelheti –

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

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