HashMap at HashSet

Anonim

Kapag natututo ka ng isang bagong wika sa computer, ang isa sa mga unang bagay na madalas mong tanungin ay kung paano magtrabaho kasama ang mga malalaking grupo ng data. Ang paksa na ito ay madalas na sakop sa ilalim ng paksang "Mga Structural ng Data". Kung humukay ka ng mas malalim, dapat kang lumabas sa mga paksa tulad ng naka-link na mga listahan, mga queue, mga stack, at binary tree sa maraming iba pang mga istruktura ng data. Sa Java, ang mga kaayusan na ito ay bahagi ng Java Collections Framework. Isang koleksyon ay walang anuman kundi isang uri ng istraktura ng data na tumutukoy sa isang grupo ng maraming mga elemento ng data at ang Java Collections Framework standardizes ang paraan kung saan ang mga grupong ito ng mga bagay ay hinahawakan. Sa katunayan, ang balangkas ng koleksyon ay idinisenyo upang matugunan ang ilang mga layunin.

Ang buong balangkas ng koleksyon ay idinisenyo sa paligid ng isang hanay ng mga karaniwang interface. Ang ilang mga standard na pagpapatupad tulad ng LinkedList, HashSet, at TreeSet ay nagbibigay ng mga interface na ito na maaari mong bilang. Bilang karagdagan, maaari mo ring ipatupad ang iyong sariling koleksyon kung pipiliin mo. Gayunpaman, bilang karagdagan sa mga koleksyon, tinutukoy ng balangkas ang ilang mga interface ng interface at mga klase. Ang Java ay naglalaman ng tatlong pagpapatupad ng pangkalahatang layunin ng mapa - HashMap, TreeMap at LinkedHashMap - kung saan nag-iimbak ng mga pares ng key / halaga. Bagaman hindi kumokolekta ang mga mapa, ang mga ito ay ganap na isinama sa mga koleksyon. Sa katunayan, nakatuon ang mga mapa sa mga grupo ng kaugnayan sa pagitan ng mga bagay. Binabanggit ng artikulong ito ang mga pangunahing pagkakaiba sa pagitan ng HashMap at HashSet.

Ano ang isang HashMap?

Ang HashMap ay ang pinakakaraniwang ginagamit na pagpapatupad ng interface ng Map na nagbibigay ng isang pangunahing mapa ng key / halaga kung saan ang mga elemento ay hindi nakaayos. Gumagamit ito ng isang espesyal na halaga na tinatawag na isang hash code, sa halip ng isang mabagal na paghahanap ng susi. Ang hash code ay isang paraan upang kumuha ng impormasyon sa bagay na pinag-uusapan at buksan ito sa isang "medyo kakaibang" int para sa bagay na iyon. Ito ay gumagana lamang sa hashing na prinsipyo na nangangahulugang gumagamit ito ng function ng hash upang mapalala ang mga halaga. Tulad ng Vector at Stack ang kanilang mga kapalit sa ArrayList at LinkedList, ang Hashtable ay may kapalit sa HashMap. Pinapalawak nito ang AbstractMap upang ipatupad ang interface ng Map gamit ang isang panloob na representasyon ng Hashtable. At katulad ng iba pang mga pagpapatupad ng pangkalahatang layunin, ang HashMap ay sumusuporta sa mga opsyonal na pamamaraan ng Map, nagpapahintulot sa null value, at hindi naka-synchronize.

Ano ang isang HashSet?

Ang HashSet ay isa sa mga miyembro ng Java Collections Framework na nagpapatupad ng Set interface, na sinusuportahan ng hash table na sa katunayan ay isang halimbawa ng HashMap. Tulad ng ipinahihiwatig ng pangalan, ito ay ipinatutupad ng isang hash table, isang array kung saan ang mga elemento ay naka-imbak sa isang posisyon na nagmula sa kanilang mga nilalaman. Hindi tulad ng isang Mapa, Itakda ang eksaktong isang Collection na may eksaktong parehong interface, kaya walang anumang dagdag na pag-andar tulad ng mayroong dalawang magkakaibang Listahan. Gumagamit ang HashSet ng isang hashing function na partikular na idinisenyo para sa mabilis na pag-usisa. Ito ay isang unordered na koleksyon ng mga natatanging bagay na hindi maaaring mag-imbak ng mga dobleng halaga. Ang HashSet ay umaabot sa klase ng AbstractSet na nagpapatupad ng Itakda ang interface. Gayunpaman, hindi tinukoy ng HashSet ang anumang karagdagang mga pamamaraan maliban sa mga ibinigay ng mga superclasses at mga interface nito.

Pagkakaiba sa Pagitan ng HashMap at HashSet

  1. Basic

Ang HashMap ay ang pinakakaraniwang ginagamit na pagpapatupad ng interface ng Map na nagbibigay ng isang pangunahing mapa ng key / halaga kung saan ang mga elemento ay hindi nakaayos. Ito ay gumagana lamang sa hashing na prinsipyo na nangangahulugang gumagamit ito ng function ng hash upang mapalala ang mga halaga. Ang HashSet, sa kabilang banda, ay isa sa mga miyembro ng Java Collections Framework na nagpapatupad ng Set interface, na sinusuportahan ng hash table na sa katunayan ay isang halimbawa ng HashMap. Nangungusap lamang, ipinapatupad ng HashMap ang interface ng Map, samantalang ipinapatupad ng HashSet ang interface ng Set.

  1. Pag-andar

Lumilikha ang HashSet ng koleksyon na gumagamit ng hash table para sa imbakan. Ang Hash table ay nagtatabi ng impormasyon gamit ang isang paraan na tinatawag na hashing. Gumagamit ang HashSet ng function na hashing, na partikular na idinisenyo para sa mabilis na paghahanap, upang mag-imbak ng mga elemento o halaga. Karamihan sa pag-andar ng HashSet ay nagbibigay sa pamamagitan ng AbstractCollection at AbstractSet superclass, na ibinahagi ng HashSet sa TreeSet. Pinalalawak ng HashMap ang AbstractMap upang maipatupad ang interface ng Map gamit ang isang panloob na representasyon ng Hashtable. Ang parehong mga klase ay hindi naka-synchronize na ibig sabihin hindi sila ay angkop para sa thread-safe na operasyon.

  1. Duplicate Values

Dahil hindi sinusuportahan ng Mapa ang mga duplicate na key, hindi pinapayagan ng HashMap ang mga duplicate key ngunit pinahihintulutan itong magkaroon ng mga dobleng halaga. Ito ay nangangahulugan na ang mga dobleng halaga ay maaaring umiiral sa HashMap ngunit maaari mong gamitin ang koleksyon bilang halaga laban sa ilang key. Ang bawat key ay dapat na natatangi sa isang HashMap at ang isang solong key ay hindi maaaring pahintulutang magkaroon ng higit sa 1 halaga. Ang HashSet, sa kabilang banda, ay hindi maaaring magkaroon ng mga duplicate na elemento sa pamamagitan lamang ng kahulugan ng isang Set, na nangangahulugang hindi ka maaaring mag-imbak ng mga dobleng halaga sa HashSet. Pinapayagan lamang ng HashMap ang isang null key ngunit nagbibigay-daan sa anumang bilang ng mga null value, samantalang ang HashSet ay nagbibigay-daan lamang ng isang null na halaga.

  1. Pag-iimbak ng Mekanismo

Gumagana ang HashMap sa hashing na prinsipyo na nangangahulugang gumagamit ito ng isang function ng hash upang mapaang mapakilala ang mga halaga sa loob gamit ang hashing algorithm upang paganahin ang madaling pagkuha. Ang isang tunay na mekanismo ng hashing ay laging nagbabalik ng parehong hashCode () kapag inilapat sa parehong bagay. Ang HashSet, sa kabilang banda, ay gumagamit ng internasyonal na HashMap bilang isang back-up na istraktura ng data upang magdagdag o mag-imbak ng mga bagay. Ang ibig sabihin nito kapag ang isang bagay ng HashSet ay nilikha, ito ay bubuo ng isang bagay ng HashMap.

HashMap vs. HashSet: Tsart ng Paghahambing

Buod ng HashMap Vs. HashSet

Kahit na ang parehong HashMap at HashSet ay hindi naka-synchronize na ibig sabihin, hindi sila angkop para sa mga operasyon ng thread na ligtas at ang mga ito ay ganap na magkaibang mga construct, nagbibigay sila ng patuloy na pagganap ng oras para sa mga pangunahing pagpapatakbo tulad ng pagdagdag, pag-alis ng elemento atbp HashMap ay isang pangkalahatang layunin na pagpapatupad ng ang interface ng Map na nagtatabi ng mga pares ng key / halaga, ang HashSet ay isang pagpapatupad ng interface ng Itakda. Ginagamit ng isang HashSet ang isang HashMap upang maibalik ang pagpapatupad nito. Ang isang HashMap, gayunpaman, ay gumagamit ng hashing na prinsipyo at ginagamit ito upang mabilis na manghuli para sa susi.