HashMap i Hashtable

Anonim

Okvir Java Zbirke nudi niz zbirnih razreda. Svaka klasa ima vlastite snage i slabosti. Neke od nastava pružaju potpune implementacije koje se mogu koristiti kao-je. Drugi su sažetak koji pružaju skeletne implementacije koje se koriste kao polazišta za stvaranje zbirki. Implementacije zbirki koriste okvir sinkroniziranog omotača za pružanje sinkroniziranih razreda, inače su implementacije nesinkronizirane. Nekoliko klasa pruža implementaciju sučelja karata.

Java platforma sadrži tri opće namjene Map implementacije: HashMap, TreeMap i LinkedHashMap. HashMap i Hashtable su dvije zbirke u Javi za pohranjivanje parova ključa / vrijednosti u hash tablici. Hashtable je sinkronizirana karta i HashMap je nesinkronizirana karta. Ipak, ako trebate koristiti sinkroniziranu mapu, Hashtable je brži od korištenja HashMap u sinkroniziranom omotu. Obje su zbirke temeljene na hashu u Javi, ali imaju njihov pravi udio razlika. Istaknemo neke ključne razlike između njih kako bismo vam bolje razumjeli uvjete.

Što je HashMap?

HashMap je implementacija karte temeljena na hash tablici koja pruža konstantne performanse za umetanje i lociranje parova. Klasa HashMap pruža implementaciju karte koja se temelji na Hashtable strukturi podataka. Ova implementacija podržava sve operacije karte i omogućuje više null vrijednosti, ali samo jedan null ključ. Koristi parove ključa / vrijednosti za pohranu vrijednosti u hash tablici. To je nesinkronizirana karta, što znači da nije siguran niti i ne može se podijeliti između više niti bez odgovarajuće sinkronizacije.

Što je Hashtable?

Za razliku od HashMap, Hashtable je sinkronizirana karta i siguran je za poruke, što znači da se može dijeliti između više niti. U programu Hashtable možete odrediti objekt koji se može koristiti kao ključ i vrijednost koja ide s ključem. Hashtable mapira ključeve vrijednosti uz pomoć hash funkcije. Java pruža ovu funkciju u obliku metode hashcode () metode, koje klase nadjačavaju kako bi pružile odgovarajuće šifre hashova. Za razliku od HashMap, Hashtable ne podržava null vrijednosti i null tipke jer postoji null check u implementaciji metode implementacije Hashtable.

Razlika između HashMap i Hashtable

  1. Osnove HashMap vs. Hashtable

Obje su zbirke temeljene na hashu u Java koji se koriste za pohranu podataka u parovima ključa / vrijednosti. HashMap je implementacija karte temeljena na hash tablici koja pruža konstantne performanse za umetanje i lociranje parova. Izvedba se može prilagoditi pomoću konstruktora koji omogućuju postavljanje kapaciteta i faktora opterećenja tablice hash. Osnovni Hashtable je vrlo sličan HashMapu, pa čak i nazive metoda. Pohranjuje ključ / vrijednost u hash tablici. U programu Hashtable možete odrediti objekt koji se može koristiti kao ključ i vrijednost koja ide s ključem.

  1. Sinkronizacija HashMap vs. Hashtable

I HashMap i Hashtable koriste tehnike hashiranja za pohranu vrijednosti na temelju ključa. Kao HashMap, Hashtable upotrebljava parove ključa / vrijednosti za pohranu vrijednosti u hash tablici. Međutim, ključna razlika između ta dva je sinkronizacija. HashMap je nesinkronizirana karta, dok je Hashtable sinkronizirana karta. To znači da HashMap nije siguran niti može biti podijeljen između više niti bez pravilnog sinkronizacijskog koda. Naprotiv, Hashtable je siguran od niti i može se podijeliti između više niti. Hashtable je brži od korištenja HashMap u sinkroniziranom omotaču, ako trebate koristiti sinkroniziranu mapu.

  1. Null tipke i null vrijednosti za HashMap vs. Hashtable

Klasa HashMap pruža implementaciju karte koja se temelji na Hashtable strukturi podataka. Ova implementacija podržava sve operacije karte i omogućuje više null vrijednosti, ali samo jedan null ključ kako bi mogao održavati jedinstvena ključna svojstva. Međutim, ne jamči za redoslijed pohranjivanja unosa. Hashtable, s druge strane, mapira ključeve vrijednosti uz pomoć hash funkcije. Za razliku od HashMap, Hashtable ne podržava null vrijednosti i null tipke jer postoji null check u implementaciji metode implementacije Hashtable.

  1. Izvedba HashMap vs. Hashtable

Budući da HashMap nije sinkronizirana karta, mnogo je brži i bolji od Hashtablea u pogledu performansi i zapravo koristi manje memorije nego Hashtable. Iako su praktički identični, Hashtable je malo sporiji od HashMapa, ali brži od sinkroniziranog HashMapa. Nasuprot tome, nije moguće upotrebljavati Hashtable s multithreaded pristupom jer su samo metode sinkronizirane. Hashtable je sinkronizirani kolega za HashMap. Nen-sinkronizirani objekti bolje se uspoređuju sa sinkroniziranim objektima baš kao što je Hashtable bolje obavlja u jednom okruženju s navojem.

HashMap vs Hashtable: usporedni prikaz

Sažetak HashMap vs. Hashtable

Klasa HashMap daje vam nerazvrstanu, neurednu kartu. Dakle, kada vam je potrebna karta i ne morate brinuti o redoslijedu pohranjivanja unosa, onda je HashMap način na koji možete ići.

Hashtable, baš kao i Vector, bio je iz prapovijesnih Java vremena. Baš kao što je Vector sinkronizirani suparnik modernijem i naprednom ArrayListu, Hashtable je sinkronizirani kolega za HashMap. Međutim, klasa se ne može sinkronizirati, pa kad kažemo da je Hashtable sinkronizirana karta, to znači da su ključne metode klase sinkronizirane.

Iako su obje praktički identične, razlika leži u načinu na koji se sinkroniziraju i na način na koji oni funkcioniraju. HashMap se bolje izvodi u okruženju s više navojem, dok se Hashtable bolje izvodi u jednom okružju s navojem.