HashMap at Hashtable
Ang balangkas ng Java Collections ay nagbibigay ng isang hanay ng mga klase ng koleksyon. Ang bawat klase ay may sariling lakas at kahinaan. Ang ilan sa mga klase ay nagbibigay ng buong pagpapatupad na maaaring magamit bilang-ay. Ang iba ay abstract na nagbibigay ng mga kalansay na pagpapatupad na ginagamit bilang panimulang punto para sa paglikha ng mga koleksyon. Ang mga pagpapatupad ng koleksyon ay gumagamit ng balangkas na naka-synchronize-wrapper upang magkaloob ng mga naka-synchronize na klase, kung hindi man, ang mga pagpapatupad ay hindi naka-synchronize. Ang ilang mga klase ay nagbibigay ng mga pagpapatupad ng interface ng mapa.
Ang Java platform ay naglalaman ng tatlong pangkalahatang-layunin ng pagpapatupad ng Mapa: HashMap, TreeMap, at LinkedHashMap. Ang HashMap at Hashtable ay dalawang koleksyon sa Java na ginamit upang mag-imbak ng mga pares ng key / halaga sa isang hash table. Ang Hashtable ay isang naka-synchronize na Mapa at HashMap ay isang unsynchronized na Mapa. Gayunpaman, kung kailangan mong gumamit ng naka-synchronize na Mapa, ang isang Hashtable ay mas mabilis kaysa sa paggamit ng isang HashMap sa isang naka-synchronize na wrapper. Parehong mga koleksyon ng hash na nakabatay sa Java ngunit mayroon silang makatarungang bahagi ng mga pagkakaiba. I-highlight namin ang ilang mga pangunahing pagkakaiba sa pagitan ng dalawa upang matulungan kang mas mahusay na maunawaan ang mga tuntunin.
Ano ang HashMap?
Ang HashMap ay pagpapatupad ng Mapa batay sa isang hash table na nagbibigay ng pare-pareho na pagganap para sa pagpasok at paghahanap ng mga pares. Ang klase ng HashMap ay nagbibigay ng pagpapatupad ng mapa na batay sa isang istraktura ng Hashtable na data. Sinusuportahan ng pagpapatupad na ito ang lahat ng mga pagpapatakbo ng Mapa at nagbibigay-daan sa maraming null na halaga ngunit isang null key lamang. Gumagamit ito ng mga pares ng key / halaga upang mag-imbak ng mga halaga sa isang hash table. Ito ay isang unsynchronized na Mapa na nangangahulugang hindi ito ligtas sa thread at hindi maibabahagi sa pagitan ng maraming mga thread na walang wastong pag-synchronize.
Ano ang Hashtable?
Hindi tulad ng HashMap, ang Hashtable ay isang naka-synchronize na Mapa at ito ay thread-safe na nangangahulugang maaari itong maibahagi sa pagitan ng maramihang mga thread. Sa Hashtable, tinukoy mo ang isang bagay na maaaring magamit bilang isang susi at ang halaga na napupunta sa susi. Ang isang Hashtable na mga mapa ay may mga susi sa mga halaga sa tulong ng isang hash function. Nagbibigay ang Java ng function na ito sa anyo ng hashcode () na pamamaraan ng Object, kung saan ang mga pag-override ng klase upang magbigay ng naaangkop na hash code. Hindi tulad ng HashMap, hindi sinusuportahan ng Hashtable ang null values at null keys dahil mayroong null check sa pagpapatupad ng puting paraan ng Hashtable.
Pagkakaiba sa pagitan ng HashMap at Hashtable
Parehong ang mga koleksyon ng hash na nakabatay sa Java na ginagamit upang mag-imbak ng data sa mga pares ng key / halaga. Ang HashMap ay pagpapatupad ng Mapa batay sa isang hash table na nagbibigay ng pare-pareho na pagganap para sa pagpasok at paghahanap ng mga pares. Maaaring iakma ang pagganap sa paggamit ng mga constructor na nagbibigay-daan sa iyo upang itakda ang kapasidad at kadahilanan ng load ng hash table. Ang pangunahing Hashtable ay lubos na katulad ng HashMap, kahit na ang mga pangalan ng pamamaraan. Naglalaman ito ng pares ng key / halaga sa hash table. Sa Hashtable, tinukoy mo ang isang bagay na maaaring magamit bilang isang susi at ang halaga na napupunta sa susi.
Ang parehong HashMap at Hashtable ay gumagamit ng mga teknik ng hashing upang mag-imbak ng mga halaga batay sa susi. Tulad ng HashMap, ang Hashtable ay gumagamit ng mga pares ng key / halaga upang mag-imbak ng mga halaga sa isang hash table. Gayunpaman, ang pangunahing pagkakaiba sa pagitan ng dalawa ay pag-synchronize. Ang HashMap ay isang unsynchronized Map habang ang Hashtable ay isang naka-synchronize na Mapa. Nangangahulugan ito na ang HashMap ay hindi ligtas sa thread at hindi maibabahagi sa pagitan ng maraming mga thread na walang wastong code sa pag-synchronize. Sa kabilang banda, ang Hashtable ay thread-safe at maaaring ibahagi sa pagitan ng maraming mga thread. Ang Hashtable ay mas mabilis kaysa sa paggamit ng isang HashMap sa isang naka-synchronize na wrapper, kung kailangan mong gumamit ng naka-synchronize na Mapa.
Ang klase ng HashMap ay nagbibigay ng pagpapatupad ng mapa na batay sa isang istraktura ng Hashtable na data. Sinusuportahan ng pagpapatupad na ito ang lahat ng mga pagpapatakbo ng Mapa at nagpapahintulot ng maramihang null na halaga ngunit isa lamang na null key upang mapanatili nito ang mga natatanging key properties. Gayunpaman, wala itong mga garantiya sa pagkakasunud-sunod kung saan nakaimbak ang mga entry. Ang Hashtable, sa kabilang banda, ay nagpapalit ng mga susi sa mga halaga sa tulong ng isang function ng hash. Hindi tulad ng HashMap, hindi sinusuportahan ng Hashtable ang null values at null keys dahil mayroong null check sa pagpapatupad ng puting paraan ng Hashtable.
Dahil ang HashMap ay hindi isang naka-synchronize na Mapa ito ay mas mabilis at mas mahusay kaysa sa isang Hashtable sa mga tuntunin ng pagganap, at sa katunayan, gumagamit ng mas kaunting memory kaysa sa Hashtable. Kahit na halos magkapareho ang mga ito, ang Hashtable ay medyo mas mabagal kaysa sa isang HashMap ngunit mas mabilis kaysa sa isang naka-synchronize na HashMap. Inherently, hindi ligtas na gamitin ang Hashtable na may multithreaded access dahil lamang ang mga pamamaraan ay naka-synchronize. Ang Hashtable ay ang naka-synchronize na kamukhang-mukha sa HashMap. Ang mga hindi naka-synchronize na mga bagay ay mas mahusay na gumaganap kapag inihambing sa naka-synchronize na mga bagay tulad ng isang Hashtable na gumaganap nang mas mahusay sa isang solong may sinulid na kapaligiran.
HashMap vs Hashtable: Tsart ng Paghahambing
Buod ng HashMap Vs. Hashtable
Binibigyan ka ng klase ng HashMap ng unsorted, unordered na Mapa. Kaya kapag kailangan mo ng isang Mapa at wala kang pag-aalaga tungkol sa pagkakasunud-sunod kung saan nakaimbak ang mga entry, pagkatapos ay ang HashMap ay ang paraan upang pumunta.
Ang Hashtable, tulad ng Vector, ay nasa mula sa sinaunang panahon ng Java. Tulad ng Vector ay isang naka-synchronize na kamukhang-mukha sa mas moderno at advanced na ArrayList, ang Hashtable ay ang naka-synchronize na kapilas sa HashMap. Gayunpaman, ang isang klase ay hindi maaaring i-synchronize, kaya kapag sinasabi namin na ang Hashtable ay isang naka-synchronize na Mapa, nangangahulugan ito na ang mga pangunahing pamamaraan ng klase ay naka-synchronize.
Habang pareho ang parehong magkapareho, ang pagkakaiba ay nakasalalay sa paraan na sila ay naka-synchronize at kung paano nila ginaganap. Ang HashMap ay gumaganap nang mas mahusay sa isang multi threaded na kapaligiran samantalang ang Hashtable ay gumaganap ng mas mahusay sa isang solong may sinulid na kapaligiran.