HashMap i HashSet

Anonim

Kada naučite novi jezik računala, jedna od prvih stvari koje možete postaviti je kako raditi s velikim brojem podataka. Ova je tema često pokrivena temom "Podatkovne strukture". Ako dublje kopirate, morate se obratiti temama kao što su povezani popisi, queues, stacks i binarna stabla među mnogim drugim strukturama podataka. U Javi, te su strukture dio Okvira Java Zbirke. Zbirka nije ništa drugo nego vrsta strukture podataka koja se odnosi na grupiranje višestrukih elemenata podataka, a okvir Java Zbirke standardizira način na koji se te skupine objekata obrađuju. U stvari, zbirke okvir je dizajniran da zadovolji nekoliko ciljeva.

Cijeli zbirni okvir osmišljen je oko skupa standardnih sučelja. Nekoliko standardnih implementacija kao što su LinkedList, HashSet i TreeSet osiguravaju ta sučelja koja vam se sviđa. Uz to, možete odabrati vlastitu zbirku. Međutim, uz zbirke, okvir definira nekoliko sučelja i klasa karata. Java sadrži tri opće namjene implementacije karata - HashMap, TreeMap i LinkedHashMap - koje pohranjuju parove ključa / vrijednosti. Iako karte nisu tehnički zbirke, one su potpuno integrirane u zbirke. U stvari, karte se fokusiraju na skupine udruživanja između objekata. Ovaj članak sažima ključne razlike između HashMap i HashSet.

Što je HashMap?

HashMap je najčešća implementacija sučelja Karte koja pruža osnovnu kartu ključa / vrijednosti gdje su elementi neorganizirani. Koristi posebnu vrijednost naziva hash kôd, umjesto polaganog pretraživanja ključa. Haski kod je način za prikupljanje informacija u predmetnom predmetu i pretvoriti ga u "relativno jedinstveni" int za taj objekt. To jednostavno funkcionira na principu hashinga, što znači da koristi hash funkciju za mapiranje identifikacijskih vrijednosti. Baš kao što Vector i Stack imaju svoje zamjene u ArrayList i LinkedList, Hashtable ima zamjenu u HashMapu. Proširuje AbstractMap kako bi implementirao sučelje Karta pomoću interne Hashtable prikaza. I slično drugim implementacijama opće namjene, HashMap podržava dodatne metode Map, omogućuje null vrijednosti i nije sinkroniziran.

Što je HashSet?

HashSet je jedan od članova okvira za Java Zbirke koji implementiraju sučelje Set, potpomognuto hash tablicom koja je zapravo HashMap instanca. Kao što naziv implicira, implementira ga tablica hash, polje u kojem se elementi pohranjuju na položaju izvedenom iz njihovog sadržaja. Za razliku od karte, Set je točno zbirka s točno istim sučeljem, tako da nema dodatnih funkcionalnosti kao što je to s dva različita popisa. HashSet koristi funkciju raspršivanja koja je posebno dizajnirana za brzo pretraživanje. To je neuredna zbirka jedinstvenih objekata koji ne mogu pohraniti duple vrijednosti. HashSet proširuje klasu AbstractSet koja implementira Set interfejs. Međutim, HashSet ne definira nikakve dodatne metode osim onih koje osiguravaju nadklasi i sučelja.

Razlika između HashMapa i HashSeta

  1. Osnovni, temeljni

HashMap je najčešća implementacija sučelja Karte koja pruža osnovnu kartu ključa / vrijednosti gdje su elementi neorganizirani. To jednostavno funkcionira na principu hashinga, što znači da koristi hash funkciju za mapiranje identifikacijskih vrijednosti. HashSet, s druge strane, jedan je od članova okvira Java Zbirke koji implementiraju sučelje Set, potpomognuto tablicom hash koja je zapravo HashMap instanca. Jednostavno rečeno, HashMap implementira sučelje Map, dok HashSet implementira Set sučelje.

  1. funkcionalnost

HashSet stvara zbirku koja koristi tablicu raspršivanja za pohranu. Hash tablica pohranjuje informacije pomoću metode nazvanog hashing. HashSet koristi funkciju raspršivanja, koja je posebno dizajnirana za brzo pretraživanje, za pohranu elemenata ili vrijednosti. Većina HashSet funkcionalnosti pruža kroz superclass AbstractCollection i AbstractSet, koji HashSet dijeli sa TreeSetom. HashMap proširuje AbstractMap kako bi implementirao sučelje mapa pomoću internog Hashtable prikaza. Obje klase nisu sinkronizirane, što znači da nisu prikladne za operacije bez navoja.

  1. Duplicirane vrijednosti

Budući da Karta ne podržava duple ključeve, HashMap ne dopušta duplicirane tipke, ali dopušteno je da imaju dvostruke vrijednosti. To znači da duplikat vrijednosti mogu postojati u HashMapu, ali možete koristiti zbirku kao vrijednost protiv nekog ključa. Svaka tipka mora biti jedinstvena u HashMapu, a jedan ključ ne smije imati više od 1 vrijednosti. HashSet, s druge strane, ne može imati duple elemente samo po definiciji Set, što znači da ne možete pohraniti duple vrijednosti u HashSet. HashMap omogućuje samo jedan null ključ, ali dopušta bilo koji broj null vrijednosti, dok HashSet dopušta samo jednu null vrijednost.

  1. Mehanizam za pohranu

HashMap radi na principu hasha, što znači da koristi hash funkciju za mapiranje vrijednosti identifikacije interno pomoću algoritma raspršivanja kako bi se omogućilo jednostavno pronalaženje. Pravi mehanizam hash uvijek vraća isti hashCode () kada se primjenjuje na isti objekt. HashSet, s druge strane, interno koristi HashMap kao strukturu podloga za dodavanje ili pohranu predmeta. To znači kada se stvori objekt HashSeta, stvorit će ga objekt HashMap.

HashMap vs HashSet: usporedni prikaz

Sažetak HashMap vs. HashSet

Iako i HashMap i HashSet nisu sinkronizirani, što znači da nisu prikladni za radnje sigurne temeljem niti su potpuno drugačiji konstrukti, oni pružaju konstantne performanse vremena za osnovne operacije kao što su dodavanje, uklanjanje elementa itd. Dok je HashMap općenita primjena sučelje Karte koja pohranjuje ključeve / vrijednosti parova, HashSet je implementacija Set sučelja. HashSet koristi HashMap kako bi podržao njegovu implementaciju. HashMap, međutim, koristi princip širenja i koristi ga za brzo pronalaženje ključa.