Különbségek a HashMap és a Hashtable között

1. Áttekintés

Ebben a rövid bemutatóban a Hashtable és a HashMap.

2. Hashtable és HashMap Java-ban

Hashtable és HashMap meglehetősen hasonlóak - mindkettő olyan gyűjtemény, amely a Térkép felület.

Továbbá a put (), kap(), eltávolítás (), és tartalmazzaKey () módszerek biztosítják az állandó idejű teljesítményt O (1). Belsőleg ezek a módszerek az adatok tárolására szolgáló vödrök használatának általános elve alapján működnek.

Egyik osztály sem tartja fenn az elemek beszúrási sorrendjét. Más szavakkal, az első hozzáadott elem nem lehet az első elem, amikor az értékeket iteráljuk.

De vannak olyan különbségeik is, amelyek bizonyos helyzetekben jobbá teszik egymást. Nézzük meg közelebbről ezeket a különbségeket.

3. Közötti különbségek Hashtable és HashMap

3.1. Szinkronizálás

Először, Hashtable menetbiztos és megosztható az alkalmazás több szála között.

Másrészről, HashMap nincs szinkronizálva, és több szál nem érhető el további szinkronizációs kód nélkül. Tudjuk használni Collections.synchronizedMap () szálbiztos változatának elkészítéséhez a HashMap. Létrehozhatunk egyedi zárkódot is, vagy biztonságossá tehetjük a kódot a szinkronizált kulcsszó.

HashMap nincs szinkronizálva, ezért gyorsabb és kevesebb memóriát használ, mint Hashtable. Általában a szinkronizálatlan objektumok gyorsabbak, mint az egyetlen szálú alkalmazás szinkronizált objektumai.

3.2. Null Értékek

Egy másik különbség az nulla kezelése. HashMap lehetővé teszi egy hozzáadását Belépés val vel nulla mint kulcs, valamint sok bejegyzés a nulla mint érték. Ellentétben, Hashtable nem engedi nulla egyáltalán. Lássunk egy példát nulla és HashMap:

HashMap térkép = új HashMap (); map.put (null, "érték"); map.put ("key1", null); map.put ("key2", null);

Ennek eredményeként:

assertEquals (3, map.size ());

Ezután nézzük meg, hogy miben különbözik a Hashtable:

Hashtable táblázat = új Hashtable (); table.put ("kulcs", null);

Ennek eredményeként a NullPointerException. Objektum hozzáadása a nulla mint kulcs azt is eredményezi, hogy a NullPointerException:

table.put (null, "érték");

3.3. Iteráció az elemek felett

HashMap használ Iterátor az értékek iterációjára, míg Hashtable van Számláló ugyanazért. A Iterátor utódja Számláló ez kiküszöböli néhány hátrányát. Például, Iterátor van egy eltávolítás () módszer az elemek eltávolításához az alapul szolgáló gyűjteményekből.

A Iterátor egy hibamentes iterátor. Más szóval, dob egy ConcurrentModificationException amikor az alapul szolgáló gyűjtemény iteráció közben módosul. Lássuk a kudarc-példát:

HashMap térkép = új HashMap (); map.put ("kulcs1", "érték1"); map.put ("key2", "value2"); Iterátor iterátor = map.keySet (). Iterator (); while (iterator.hasNext ()) {iterator.next (); map.put ("key4", "value4"); }

Ez dob a ConcurrentModificationException kivétel, mert hívunk put () miközben iterált a gyűjtemény felett.

4. Mikor válasszon HashMap Felett Hashtable

Használnunk kellene HashMap szinkronizálatlan vagy egyszálas alkalmazáshoz.

Érdemes megemlíteni, hogy mivel a JDK 1.8, Hashtable már elavult. Azonban, ConcurrentHashMap egy nagyszerű Hashtable csere. Meg kellene fontolnunk ConcurrentHashMap többszálas alkalmazásokban használható.

5. Következtetés

Ebben a cikkben szemléltettük a különbségeket HashMap és Hashtable és mit kell szem előtt tartanunk, ha egyet kell választanunk.

Szokás szerint ezeknek a példáknak és kódrészleteknek a megvalósítása befejeződött a Githubon.