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

A Java Gyűjtemények keretszabályokat biztosítanak. Mindegyik osztálynak megvannak a saját teljesítményének erősségei és gyengeségei. Néhány osztály biztosítja a teljes megvalósítást, amely a jelenlegi állapotban felhasználható. Mások elvont formák, amelyek vázszerkezeteket biztosítanak, amelyeket kiindulópontként használnak a gyűjtemények létrehozására. A gyűjtemény implementációk a szinkronizált csomagoló keretrendszert használják szinkronizált osztályok biztosítására, különben a megvalósítások szinkronizálatlanok. Több osztály biztosítja a térkép interfész megvalósítását.

A Java platform három általános célú térkép-megvalósítást tartalmaz: HashMap, TreeMap és LinkedHashMap. A HashMap és a Hashtable két gyűjtemény a Java-ban, amelyek kulcs- és értékpárokat tárolnak a hash táblában. A Hashtable egy szinkronizált térkép, a HashMap pedig egy szinkronizálatlan térkép. Ennek ellenére, ha szinkronizált térképet kell használnia, a Hashtable gyorsabb, mint a HashMap használata a szinkronizált csomagolóban. Mindkettő hash-alapú gyűjtemény a Java-ban, de meglehetõsen megoszlanak a különbségek. Hangsúlyozzuk a kettő közötti néhány fő különbséget, hogy jobban megértsük a feltételeket.

Mi a HashMap??

A HashMap egy hash táblán alapuló Térkép megvalósítás, amely állandó időtartamú teljesítményt nyújt a párok beillesztéséhez és megkereséséhez. A HashMap osztály olyan térképes megvalósítást biztosít, amely Hashtable adatstruktúrán alapul. Ez a megvalósítás támogatja az összes térképműveletet és több null értéket is lehetővé tesz, de csak egy null kulcsot. Kulcs / érték párokat használ az értékek tárolására a hash táblában. Ez egy szinkronizálatlan térkép, ami azt jelenti, hogy nem biztonságos a szál számára, és megfelelő szinkronizálás nélkül nem osztható meg több szál között..

Mi a hashtable??

A HashMap-től eltérően a Hashtable egy szinkronizált térkép és biztonságos szál, ami azt jelenti, hogy meg lehet osztani több szál között. A Hashtable részben megadhat egy objektumot, amely használható kulcsként, és az értéket, amely a kulcshoz tartozik. A Hashtable az értékekhez kulcsok hozzárendelése egy hash funkció segítségével. A Java ezt a funkciót az Object hashcode () módszer formájában biztosítja, amely osztályok felülbírálják a megfelelő hash-kódokat. A HashMap-szel ellentétben a Hashtable nem támogatja a null értékeket és a null kulcsokat, mivel a Hashtable put módszer megvalósításában null check van.

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

  1. A HashMap Vs. alapjai hash

Mindkettő hash-alapú gyűjtemény a Java-ban, az adatok tárolására kulcs / érték párban. A HashMap egy hash táblán alapuló Térkép megvalósítás, amely állandó időtartamú teljesítményt nyújt a párok beillesztéséhez és megkereséséhez. A teljesítmény beállítható olyan konstruktorok használatával, amelyek lehetővé teszik a hash-asztal kapacitásának és terhelési tényezőjének beállítását. Az alapvető Hashtable meglehetősen hasonló a HashMap-hez, még a módszerneveknél is. A kulcs- / értékpárokat tárolja a hash táblában. A Hashtable részben megadhat egy objektumot, amely használható kulcsként, és az értéket, amely a kulcshoz tartozik.

  1. A HashMap Vs szinkronizálása hash

Mind a HashMap, mind a Hashtable hash technikákat használ az értékek kulcson alapuló tárolására. Mint a HashMap, a Hashtable kulcs / érték párokat is használ az értékek tárolására a hash táblában. A kettő közötti fő különbség azonban a szinkronizálás. A HashMap egy szinkronizálatlan térkép, míg a Hashtable egy szinkronizált térkép. Ez azt jelenti, hogy a HashMap nem biztonságos szál, és megfelelő szinkronizálási kód nélkül nem osztható meg több szál között. Éppen ellenkezőleg, a Hashtable szálbiztos, és több szál között megosztható. A hashtable gyorsabb, mint a HashMap használata szinkronizált csomagolóeszközben, ha szinkronizált térképet kell használnia.

  1. Null kulcsok és null értékek a HashMap Vs számára. hash

A HashMap osztály olyan térképes megvalósítást biztosít, amely Hashtable adatstruktúrán alapul. Ez a megvalósítás támogatja az összes térképműveletet, és több null értéket is lehetővé tesz, de csak egy null kulcsot, hogy az egyedi kulcstulajdonságokat fenntarthasson. Ez azonban nem garantálja a bejegyzések tárolási sorrendjét. A Hashtable viszont hash függvény segítségével térképezi az értékeket. A HashMap-szel ellentétben a Hashtable nem támogatja a null értékeket és a null kulcsokat, mivel a Hashtable put módszer megvalósításában null check van.

  1. A HashMap Vs teljesítménye hash

Mivel a HashMap nem egy szinkronizált térkép, a teljesítmény szempontjából sokkal gyorsabb és jobb, mint egy hashtable, és valójában kevesebb memóriát használ, mint a hashtable. Noha gyakorlatilag azonosak, a Hashtable valamivel lassabb, mint a HashMap, de gyorsabb, mint a szinkronizált HashMap. Magától értetődik, hogy a Hashtable nem többszálú hozzáféréssel használható, mert csak a módszerek vannak szinkronizálva. A hashtable a HashMap szinkronizált párja. A szinkronizálatlan objektumok jobban teljesítenek a szinkronizált objektumokhoz képest, ugyanúgy, mint a hashtable jobban teljesít egyetlen menetes környezetben.

HashMap vs. hashtable: összehasonlító táblázat

 

A HashMap Vs. összefoglalása hash

A HashMap osztály egy válogatott, rendezetlen térképet ad. Tehát amikor szüksége van egy térképre, és nem törődik a bejegyzések tárolásának sorrendjével, akkor a HashMap az út.

A hashtable, akárcsak a Vector, az őskori Java időkből származik. Csakúgy, mint a Vector a modern és fejlettebb ArrayList szinkronizált párja, a Hashtable a HashMap szinkronizált párja. Az osztályt azonban nem lehet szinkronizálni, tehát amikor azt mondjuk, hogy a Hashtable egy szinkronizált térkép, ez azt jelenti, hogy az osztály fő módszerei szinkronizálva vannak. 

Bár mindkettő gyakorlatilag azonos, a különbség abban rejlik, hogy miként vannak szinkronizálva és hogyan teljesítenek. A HashMap jobban teljesít többszálas környezetben, míg a Hashtable jobb teljesítménye egyetlen menetes környezetben.