Különbség a HashMap és a Java hashtable között

Szerző: Laura McKinney
A Teremtés Dátuma: 2 Április 2021
Frissítés Dátuma: 5 Lehet 2024
Anonim
Különbség a HashMap és a Java hashtable között - Technológia
Különbség a HashMap és a Java hashtable között - Technológia

Tartalom


A HashMap és a Hashtable egyaránt használják a tárgyak csoportja amelyek képviseltetve vannak pár. Minden egyes párt hívják Belépés tárgy. Az Gyűjtemény A bejegyzésekre a HashMap és a Hashtable objektum hivatkozik. A gyűjtemény kulcsainak egyedinak vagy megkülönböztetőnek kell lenniük. A HashMap és a Hashtable közötti különbség az HashMap különösen megvalósítja a Térkép felületet, míg a hash kibővíti a szótár osztályt (régi osztály), amelyet újraterveztünk a Térkép felület megvalósításához. A másik fontos különbség az, hogy a HashMap objektumai vannak szinkronizált mivel a Hashtable tárgyai: szinkronizált.

Nézzük meg az alább bemutatott összehasonlító táblázatot, hogy további különbségeket tudjunk meg a HashMap és a Hashtable között.


  1. Összehasonlító táblázat
  2. Meghatározás
  3. Főbb különbségek
  4. Hasonlóságok
  5. Következtetés

Összehasonlító táblázat

Az összehasonlítás alapjaHashMaphash
Végrehajtás / kiterjesztésA HashMap osztály a Map felületet valósítja meg és kiterjeszti az AbstractMap osztályt.A Hashtable kiterjeszti a Dictionary Legacy osztályt, de újratervezték és most bevezeti a Map interfészt.
összehangolásA HashMap nincs szinkronizálva, így a HashMap objektum nem biztonságos.A Hashtable szinkronizálva van, ezért a Hashtable objektuma biztonságos szál.
Keys / ÉrtékEgy kulcs csak egyszer adhatja vissza a Null értékét, de egy érték tetszőleges számú Nullot eredményezhet.A kulcs nem tudja visszaadni a Null értéket, mivel azt a kivonatkód lekérésére használják, amelyet a hash táblának indexeként használnak, és egy érték sem adhat vissza Null értéket.
Alapértelmezett kezdeti kapacitásA HashMap alapértelmezett kezdeti kapacitása 16.A Hashtable alapértelmezett kezdeti kapacitása 11.
elmozdulásiA HashMap-et az Iterator halad át.Csakúgy, mint a Map osztály, a Hashtable sem támogatja az Iterator átjárását, ezért az Enumerator programot használja.


Meghatározása HashMap

A HashMap egy olyan osztály, amely végrehajtja a Térkép felület és kibővíti a AbstractMap osztály használja a hash táblát. A HashMap objektuma egy gyűjteményre / készletre utal pár, ahol minden kulcs hozzá van rendelve egy adott értékhez. A gyűjtemény kulcsainak egyedinek kell lenniük, mivel azokat az érték lekérésére használják. Másrészt a gyűjtemény értékei megismételhetők. A HashMap osztály deklarálása és a HashMapclass építői a következők:

/ * K jelenti a kulcsot, és V jelenti a * / osztály HashMap értéket / * A HashMap osztály építői * / HashMap () HashMap (Térkép <? Kiterjeszti K,? Kiterjeszti V> m) HashMap (int kapacitás) HashMap (int kapacitás, float fillRatio)

Az első konstruktor egy alapértelmezett konstruktor, amely inicializálja a HashMap üres objektumát alapértelmezett kapacitással 16 és alapértelmezett kitöltési aránylal 0,75. A második konstruktor inicializálja a hash-térképet m értékkel. A harmadik konstruktor kivonat-térképet készít a kezdeti kapacitással, amely megfelel a „kapacitás” argumentumban megadott értéknek. A negyedik konstruktor a paraméterekben megadott kapacitással és kitöltési arányokkal inicializálja a hash-térképet. Most tanuljuk meg, hogyan kell betölteni a bejegyzéseket egy hash térképre.

Hashmap hm = új Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * output * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordánia = 200}

A fenti kódban látható, hogy létrehoztam egy üres HashMap objektumot hm alapértelmezett kezdeti kapacitással és alapértelmezett kitöltési arányval. Ezután négy bejegyzést beillesztettem a hash térképbe put (K, V) módszerrel, amely a kulcsot az értékre leképezi. Megfigyelheti, hogy a bejegyzéseket nem olyan sorrendben szerkesztik, amelyikkel betáplálja őket, mert a beszúrási sorrend nem rögzített. Most fontolja meg egy olyan esetet, amelyben már van bejegyzése a hash térképen, majd ezt követően megpróbálja beilleszteni a put (K1, V5), vagyis megpróbálja azonos kulcsot leképezni egy másik értékkel. Ezután a put módszer kicseréli a régi V1 értéket az új V2 értékre, és visszatér a régi V1 értéket, ellenkező esetben, ha soha nem próbálunk kicserélni egy kulcs értékét, akkor a put módszer a Null értékre adja vissza a kulcsot.

A Hashtable meghatározása

A Hashtable egy olyan osztály, amely kiterjeszti a Szótár osztály, amely egy örökölt osztály, amelyet újraterveztek a Térkép felület. A Hashtable az adatszerkezethez a hash táblát használja. A Hashtable hasonló a HashMap-hez, mivel itt a Hashtable objektuma is a bejegyzések gyűjteményére utal, ahol minden egyes tétel pár . A gyűjtemény összes kulcsának viszont egyedinek kell lennie, az értékek másolhatók. A gombokat különösen arra használják, hogy megkapják a hash-kódot, amely meghatározza az indexet, ahol a pár tárolása egy hash táblában. A hash táblában sem kulcs, sem érték nem adhat vissza Null mutatót. Nézzük meg a Hashtable osztály nyilatkozatát és a hashtable osztály építőit.

/ * K határozza meg a kulcsot és V határozza meg a * / osztály Hashtable kulcshoz társított értéket / * Hashtable építői * / Hashtable () Hashtable (int méret) Hashtable (int méret, float fillRatio) Hashtable (Térkép <? kiterjeszti K,? kiterjeszti V> m)

A fenti kódban az első konstruktor egy alapértelmezett konstruktor, amely létrehoz egy üres objektumot a Hashtable osztályba, alapértelmezett mérete 11 és az alapértelmezett kitöltési arány 0,75. A második konstruktor létrehoz egy kivonat-táblát, amelynek mérete megegyezik a „size” paraméterben megadott értékkel. A harmadik konstruktor létrehoz egy kivonat-táblát a paraméterben megadott mérettel és kitöltési aránygal. A negyedik konstruktor inicializálja a hash táblát m értékkel. Most tanuljuk meg, hogyan kell beilleszteni a pár a hash táblában.

Hashtable ht = új hashtable (); ht.put (új hashCode (2), 275); ht.put (új hash-kód (12), 250); ht.put (új hash-kód (16), 150); ht.put (új hashCode (8), 200); System.out.ln (ht); / * output * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

A fenti kódban létrehoztam egy üres objektumot a Hashtable-ből, és négy bejegyzést beszúrtam a put () módszerrel. Az Inside put metódust meghívtam a hashCode () -nak, amely kiszámolja és visszatér a hash-kód értékét, amely a belépési objektum indexértékévé válik. Mint láthatja, nem említettem a hash tábla méretét, tehát alapértelmezés szerint 11 lesz. Itt a beillesztési sorrend sem marad meg, és tehát, ha az ed bejegyzések nem jelentek meg egymás után, akkor az betáplálásra került.

  1. A HashMap végrehajtja Térkép interfész és kiterjeszti az absztrakt osztályt, AbstractMap míg a Hashtable kiterjeszti az absztrakt osztályt Szótár, amely szintén Legacy osztály, amelyet később átterveztek a megvalósításra Térkép felület.
  2. A HashMap objektum szinkronizált vagyis több szál is működhet rajta egyidejűleg, és ezért tárgya nem szál biztonságos. Másrészt, a Hashtable tárgyai a következők szinkronizált vagyis ha egy szál működni akar a Hashtable objektumán, akkor le kell szereznie egy zárolást az objektumon, hogy más szál ne férhessen hozzá az objektumhoz, és így szál biztonságos.
  3. A HashMap alkalmazásban a gomb visszatérhet Csak egyszer semmi, és az érték visszatérhet Null többször. Másrészről, egy kulcs soha nem tudja visszaadni a Null értéket, mivel azt a hash-kód értékének megszerzéséhez használták, amelyet indexként használnak a pár és sem az érték nem adhat vissza Null értéket.
  4. A hash tábla alapértelmezett kapacitása a HashMap osztályban 16 mivel a hashtable hash tábla alapértelmezett kapacitása: 11.
  5. Az iterátor áthaladhat a Haspmap-bejegyzések között. Másrészt, a Hashtable nem közvetlenül támogatja az Iteratorot, tehát általában Enumerator a bejegyzések Hashtable-ban történő átjárására szolgál.

Hasonlóságok:

  • A HashMap és a Hashtable egyaránt használja a hash asztal.
  • A HashMap és a Hashtable mindkét eszköz Térkép felület
  • A beszúrási sorrend nem marad meg mind a HashMap, mind a Hashtable alkalmazásban, és a kulcsok segítségével nyert hash-kód alapján.
  • A HashMap és a Hashtable alkalmazásban kulcsoknak kell lennie egyedi míg az értékek lehetnek duplikált.
  • A HashMap és a Hashtable is tartalmazhatnak heterogén tárgyak mind a kulcsok, mind az értékek esetén.
  • A HashMap és a Hashtable, mindkettő serializable és Cloneable interfészek, de nem, véletlenszerű hozzáférés.
  • Mind a HashMap, mind a Hashtable kitöltési aránya alapértelmezett 0.75.
  • A HashMap és a Hashtable a lekérdezés vagy a legjobb módszer keresés művelet.

Következtetés:

A HashMap jobb teljesítményt nyújt, mivel objektumai szinkronizálatlanok, és több szál képes egyszerre működni rajta, és ennélfogva gyorsabb, mint a hashtable.