Atšķirība starp HashMap un Hashtable

Java kolekciju ietvars nodrošina kolekciju klašu kopu. Katrai klasei ir savas veiktspējas stiprās un vājās puses. Dažas no klasēm nodrošina pilnīgu ieviešanu, ko var izmantot pašreizējā variantā. Citi ir abstrakti, kas nodrošina skeleta ieviešanu, ko izmanto kā sākumpunktu kolekciju izveidē. Kolekcijas implementācijās sinhronizēto klašu nodrošināšanai tiek izmantots sinhronizētā ietīšanas ietvars, pretējā gadījumā ieviešanas netiek sinhronizētas. Vairākas klases nodrošina kartes saskarnes ieviešanu.

Java platforma satur trīs vispārējas nozīmes kartes ieviešanu: HashMap, TreeMap un LinkedHashMap. HashMap un Hashtable ir divas Java kolekcijas, ko izmanto atslēgu / vērtību pāru glabāšanai hash tabulā. Hashtable ir sinhronizēta karte, un HashMap ir nesinhronizēta karte. Tomēr, ja jums ir jāizmanto sinhronizēta karte, Hashtable ir ātrāks nekā HashMap izmantošana sinhronizētā iesaiņojumā. Abas ir Java hash balstītas kolekcijas, taču tām ir diezgan liela atšķirība. Mēs izceļam dažas galvenās atšķirības starp abām, lai palīdzētu jums labāk izprast noteikumus.

Kas ir HashMap?

HashMap ir kartes ieviešana, kas balstīta uz hash tabulu, kas nodrošina pastāvīgu veiktspēju pāra ievietošanai un atrašanai. HashMap klase nodrošina kartes ieviešanu, kuras pamatā ir Hashtable datu struktūra. Šī ieviešana atbalsta visas kartes darbības un pieļauj vairākas nulles vērtības, bet tikai vienu nulles atslēgu. Lai saglabātu vērtības hash tabulā, tas izmanto atslēgu / vērtību pārus. Tā ir nesinhronizēta karte, kas nozīmē, ka tā nav droša pavedieniem un to nevar koplietot starp vairākiem pavedieniem bez pienācīgas sinhronizācijas.

Kas ir Hashtable?

Atšķirībā no HashMap, Hashtable ir sinhronizēta karte, un tā ir droša pavedieniem, kas nozīmē, ka to var koplietot starp vairākiem pavedieniem. Sadaļā Hashtable jūs norādāt objektu, ko var izmantot kā atslēgu, un vērtību, kas tiek pievienota atslēgai. Hashtable karšu atslēgas piešķir vērtībām, izmantojot hash funkciju. Java nodrošina šo funkciju Object hashcode () metodes veidā, kuras klases ignorē, lai nodrošinātu atbilstošus hash kodus. Atšķirībā no HashMap, Hashtable neatbalsta nulles vērtības un nulles atslēgas, jo Hashtable ievietošanas metodes ieviešanā ir null pārbaude.

Atšķirība starp HashMap un Hashtable

  1. Pamatinformācija par HashMap Vs. Jauki

Abas ir Java hash balstītas kolekcijas, ko izmanto datu glabāšanai atslēgu / vērtību pāros. HashMap ir kartes ieviešana, kas balstīta uz hash tabulu, kas nodrošina pastāvīgu veiktspēju pāra ievietošanai un atrašanai. Veiktspēju var pielāgot, izmantojot konstruktorus, kas ļauj iestatīt hash tabulas ietilpību un slodzes koeficientu. Pamata Hashtable ir diezgan līdzīgs HashMap, pat metožu nosaukumiem. Tas saglabā atslēgu / vērtību pāri hash tabulā. Sadaļā Hashtable jūs norādāt objektu, ko var izmantot kā atslēgu, un vērtību, kas tiek pievienota atslēgai.

  1. HashMap Vs sinhronizācija Jauki

Gan HashMap, gan Hashtable izmanto sajaukšanas paņēmienus vērtību saglabāšanai, pamatojoties uz atslēgu. Tāpat kā HashMap, arī Hashtable izmanto atslēgu / vērtību pārus, lai vērtības saglabātu jaukšanas tabulā. Tomēr galvenā atšķirība starp abiem ir sinhronizācija. HashMap ir nesinhronizēta karte, savukārt Hashtable ir sinhronizēta karte. Tas nozīmē, ka HashMap nav drošs pavedieniem, un to nevar koplietot starp vairākiem pavedieniem bez atbilstoša sinhronizācijas koda. Gluži pretēji, Hashtable ir drošs par pavedieniem, un to var kopīgot starp vairākiem pavedieniem. Ja vēlaties izmantot sinhronizētu karti, jaukšana ir ātrāka nekā HashMap izmantošana sinhronizētā iesaiņojumā..

  1. Null taustiņi un nulles vērtības vietnei HashMap Vs. Jauki

HashMap klase nodrošina kartes ieviešanu, kuras pamatā ir Hashtable datu struktūra. Šī ieviešana atbalsta visas kartes darbības un pieļauj vairākas nulles vērtības, bet tikai vienu nulles atslēgu, lai tā varētu saglabāt unikālas atslēgas īpašības. Tomēr tas negarantē ierakstu glabāšanas secību. Turpretī Hashtable, izmantojot hash funkciju, kartē taustiņus vērtībām. Atšķirībā no HashMap, Hashtable neatbalsta nulles vērtības un nulles atslēgas, jo Hashtable ievietošanas metodes ieviešanā ir null pārbaude.

  1. HashMap Vs veiktspēja Jauki

Tā kā HashMap nav sinhronizēta karte, tā veiktspējas ziņā ir daudz ātrāka un labāka nekā Hashtable, un faktiski tā patērē mazāk atmiņas nekā Hashtable. Lai arī tie ir praktiski identiski, Hashtable ir nedaudz lēnāks nekā HashMap, bet ātrāks par sinhronizēto HashMap. Raksturīgi, ka nav droši lietot Hashtable ar daudzpavedienu piekļuvi, jo tiek sinhronizētas tikai metodes. Hashtable ir sinhronizētais HashMap ekvivalents. Nesinhronizētie objekti darbojas labāk, salīdzinot ar sinhronizētajiem objektiem, tāpat kā jauktā darbība labāk darbojas vienā vītņotā vidē..

HashMap un Hashtable: salīdzināšanas tabula

 

Kopsavilkums par HashMap Vs. Jauki

HashMap klase sniedz jums nešķirotu, nesakārtotu karti. Tātad, ja jums nepieciešama karte un jums nav vienalga par ierakstu glabāšanas secību, tad HashMap ir veids, kā iet.

Hashtable, tāpat kā Vector, ir bijis jau aizvēsturiskos Java laikos. Tāpat kā Vector ir sinhronizēts ekvivalents modernākajam un uzlabotajam ArrayList, arī Hashtable ir sinhronizētais HashMap ekvivalents. Tomēr klasi nevar sinhronizēt, tāpēc, kad mēs sakām, ka Hashtable ir sinhronizēta karte, tas nozīmē, ka klases galvenās metodes tiek sinhronizētas. 

Lai arī abi ir praktiski identiski, atšķirība ir tajā, kā tie tiek sinhronizēti un kā tie darbojas. HashMap darbojas labāk vairāku vītņu vidē, turpretī Hashtable darbojas labāk vienā vītņotā vidē.