Razlika između HashMap-a i Hashtable-a

Okvir Java Collection nudi skup predavanja. Svaka klasa ima svoje snage i mane. Neke klase pružaju cjelovite implementacije koje se mogu koristiti kao što jesu. Ostali su apstraktni koji pružaju skeletne implementacije koji se koriste kao polazište za stvaranje zbirki. Implementacije zbirke koriste okvir sinkroniziranog omota za pružanje sinkroniziranih klasa, inače su implementacije nesinkronizirane. Nekoliko klasa nudi implementacije sučelja karte.

Java platforma sadrži tri implementacije mape opće namjene: HashMap, TreeMap i LinkedHashMap. HashMap i Hashtable dvije su zbirke na Javi koje se koriste za spremanje parova ključeva / vrijednosti u tablicu hash-a. Hashtable je sinkronizirana karta, a HashMap je nesinkronizirana karta. Ipak, ako trebate koristiti sinkroniziranu kartu, Hashtable je brži nego ako koristite HashMap u sinkroniziranom omotu. Obje su na Javi temeljene na hash kolekcijama, ali imaju popriličan udio razlika. Izdvajamo neke ključne razlike između to dvoje kako bismo vam lakše razumjeli pojmove.

Što je HashMap?

HashMap je implementacija mape koja se temelji na hash tablici koja pruža performanse stalnog vremena za umetanje i lociranje parova. HashMap klasa pruža implementaciju karte koja se temelji na strukturi podataka Hashtable. Ova implementacija podržava sve operacije karte i omogućuje više null vrijednosti, ali samo jednu null tipku. Za pohranu vrijednosti u hash tablicu koristi parove ključ / vrijednost. To je nesinkronizirana mapa, što znači da nije sigurna na niti i ne može se dijeliti između više niti bez odgovarajuće sinkronizacije..

Što je Hashtable?

Za razliku od HashMap-a, Hashtable je sinkronizirana mapa i sigurna je u niti što znači da se može dijeliti između više niti. U Hashtableu odredite objekt koji se može koristiti kao ključ i vrijednost koja ide uz ključ. Hashtable preslikava tipke na vrijednosti uz pomoć hash funkcije. Java pruža ovu funkciju u obliku Object hashcode () metode, koja klase nadjačava kako bi pružila odgovarajuće hash kodove. Za razliku od HashMap-a, Hashtable ne podržava null vrijednosti i null keys jer postoji null check u put-implementaciji metode Hashtable.

Razlika između HashMap-a i Hashtable-a

  1. Osnove HashMap vs. Hashtable

Obje su Java zbirke temeljene na hashu i koriste se za pohranu podataka u parove ključeva / vrijednosti. HashMap je implementacija mape koja se temelji na hash tablici koja pruža performanse stalnog vremena za umetanje i lociranje parova. Performanse se mogu prilagoditi uporabom konstruktora koji vam omogućuju postavljanje kapaciteta i faktora opterećenja tablice hash-a. Osnovni Hashtable prilično je sličan HashMap-u, čak i niz imena metoda. Pohranjuje par ključ / vrijednost u tablici hash-a. U Hashtableu odredite objekt koji se može koristiti kao ključ i vrijednost koja ide uz ključ.

  1. Sinkronizacija HashMap vs. Hashtable

I HashMap i Hashtable koriste hešing tehnike za pohranjivanje vrijednosti na temelju ključa. Kao i HashMap, Hashtable koristi parove ključ / vrijednost za pohranjivanje vrijednosti u hash tablicu. Međutim, ključna razlika između to dvoje je sinkronizacija. HashMap je nesinkronizirana karta dok je Hashtable sinkronizirana karta. To znači da HashMap nije siguran na niti i ne može se dijeliti između više niti bez odgovarajućeg koda za sinkronizaciju. Naprotiv, Hashtable je siguran za niti i može ga dijeliti između više niti. Hashtable je brži nego ako koristite HashMap u sinkroniziranom omotu, ako trebate koristiti sinkroniziranu kartu.

  1. Nulte ključeve i nulte vrijednosti za HashMap vs. Hashtable

HashMap klasa pruža implementaciju karte koja se temelji na strukturi podataka Hashtable. Ova implementacija podržava sve operacije karte i omogućuje više null vrijednosti, ali samo jednu null tipku, tako da može održavati jedinstvena svojstva ključa. No, ne jamči za redoslijed pohranjivanja unosa. S druge strane, Hashtable koristi ključeve vrijednosti pomoću hash funkcije. Za razliku od HashMap-a, Hashtable ne podržava null vrijednosti i null keys jer postoji null check u put-implementaciji metode Hashtable.

  1. Performanse HashMap vs. Hashtable

Budući da HashMap nije sinkronizirana mapa, mnogo je brži i bolji od Hashtable-a u smislu performansi, a u stvari koristi manje memorije nego Hashtable. Iako su gotovo identični, Hashtable je malo sporiji od HashMap-a, ali brži od sinkroniziranog HashMap-a. Sama po sebi, nije sigurno koristiti Hashtable s višeslojnim pristupom jer su samo metode sinkronizirane. Hashtable je sinkronizirani kolega za HashMap. Ninkronizirani objekti djeluju bolje u usporedbi sa sinkroniziranim objektima baš kao što Hashtable ima bolji uspjeh u okruženju s jednim navojem.

HashMap vs. Hashtable: Uporedni grafikon

 

Sažetak HashMap vs. Hashtable

Klasa HashMap daje vam neiskorištenu, neuređenu kartu. Dakle, kada vam treba karta i nije vas briga za redoslijed pohranjivanja unosa, HashMap je put prema tome.

Hashtable, baš kao i Vector, potječe iz prapovijesnih Java vremena. Baš kao što je Vector, sinkroniziran je kolega s modernijim i naprednijim ArrayListom, Hashtable je sinkronizirani kolega za HashMap. Međutim, klasa se ne može sinkronizirati, pa kada kažemo da je Hashtable sinkronizirana mapa, to znači da su ključne metode klase sinkronizirane. 

Iako su oba gotovo identična, razlika leži u načinu na koji su sinkronizirani i načinu izvedbe. HashMap djeluje bolje u okruženju s više navoja dok Hashtable ima bolje rezultate u okruženju s jednim navojem.