Kada naučite novi računalni jezik, jedna od prvih stvari koju postavljate pitanje je kako raditi s velikim skupinama podataka. Ova se tema često obrađuje pod temom „Strukture podataka“. Ako kopate dublje, morate zaobići teme poput povezanih lista, redova, hrpe i binarnih stabala među mnogim drugim strukturama podataka. U Javi su ove strukture dio okvira Java Collection Collection. Zbirka nije ništa drugo do vrsta strukture podataka koja se odnosi na grupiranje više podatkovnih elemenata, a Java Collections Framework standardizira način rukovanja tim skupinama objekata. Zapravo je okvir za kolekcije osmišljen da ispuni nekoliko ciljeva.
Cijeli je okvir zbirke dizajniran oko niza standardnih sučelja. Nekoliko standardnih implementacija, kao što su LinkedList, HashSet i TreeSet, pružaju ta sučelja koja mogu biti takva kakva jesu. Uz to, također možete implementirati vlastitu kolekciju ako želite. Međutim, pored zbirki, okvir definira i nekoliko sučelja i klasa karata. Java sadrži tri implementacije mape opće namjene - HashMap, TreeMap i LinkedHashMap - koje spremaju parove ključ / vrijednost. Iako karte tehnički nisu zbirke, one su u potpunosti integrirane u zbirke. Zapravo, karte se usredotočuju na skupine povezivanja objekata. Ovaj članak sažima ključne razlike između HashMap-a i HashSet-a.
HashMap je najčešće korištena implementacija sučelja Map koja pruža osnovnu mapu ključ / vrijednost gdje su elementi nesvrstani. Ona koristi posebnu vrijednost koja se zove hash kod, umjesto sporog pretraživanja ključa. Hash-kod je način da se informacije u predmetni objekt uzmu i pretvore u "relativno jedinstvenu" int za taj objekt. Jednostavno djeluje na principu hashinga što znači da koristi hash funkciju za mapiranje identificirajućih vrijednosti. Baš kao što Vector i Stack imaju svoje zamjene u ArrayListu i LinkedListu, Hashtable ima zamjenu u HashMap-u. To proširuje AbstractMap za implementaciju sučelja Map koristeći internu Hashtable reprezentaciju. I slično kao i druge implementacije opće namjene, HashMap podržava neobavezne metode Map, omogućuje null vrijednosti i nije sinkroniziran.
HashSet je jedan od članova Java Collections Framework-a koji implementira Set sučelje, potpomognuto hash tablicom koja je ustvari HashMap instanca. Kao što naziv govori, implementira ga hash tablica, niz u kojem su elementi pohranjeni na poziciji koja proizlazi iz njihovog sadržaja. Za razliku od Map-a, Set je točno kolekcija s potpuno istim sučeljem, tako da nema neke dodatne funkcionalnosti kao što je to s dva različita popisa. HashSet koristi funkciju raspršivanja koja je dizajnirana posebno za brze pretrage. To je neuređena zbirka jedinstvenih objekata koja ne može pohraniti duplicirane vrijednosti. HashSet proširuje klasu AbstractSet koja implementira Set sučelje. Međutim, HashSet ne definira nikakve druge metode osim onih koje pružaju superklase i sučelja.
HashMap je najčešće korištena implementacija sučelja Map koja pruža osnovnu mapu ključ / vrijednost gdje su elementi nesvrstani. Jednostavno djeluje na principu hashinga što znači da koristi hash funkciju za mapiranje identificirajućih vrijednosti. S druge strane, HashSet je jedan od članova Java Collections Framework-a koji provodi Set sučelje, potpomognuto hash tablicom koja je ustvari HashMap instanca. Jednostavno govoreći, HashMap implementira Map sučelje, dok HashSet implementira Set sučelje.
HashSet stvara kolekciju koja koristi tablicu hash-a za pohranu. Hash tablica pohranjuje informacije koristeći metodu koja se naziva hashing. HashSet koristi funkciju raspršivanja koja je posebno dizajnirana za brze pretrage za pohranjivanje elemenata ili vrijednosti. Većina funkcionalnosti HashSet-a pruža se kroz superklasa AbstractCollection i AbstractSet, koju HashSet dijeli s TreeSetom. HashMap proširuje AbstractMap kako bi implementirao sučelje Map koristeći internu Hashtable reprezentaciju. Obje klase nisu sinkronizirane, što znači da nisu prikladne za sigurne operacije.
Budući da Map ne podržava dvostruke ključeve, HashMap ne dopušta duplicirane ključeve, ali dopušteno je imati dvostruke vrijednosti. To znači da duplicirane vrijednosti mogu postojati u HashMap-u, ali kolekciju možete koristiti kao vrijednost u odnosu na neki ključ. Svaki ključ mora biti jedinstven u HashMap-u, a niti jedan ključ ne smije imati više od jedne vrijednosti. HashSet, s druge strane, ne može imati dvostruke elemente samo definicijom skupa, što znači da ne možete pohraniti duplicirane vrijednosti u HashSet. HashMap dopušta samo jednu null tipku, ali dopušta bilo koji broj null vrijednosti, dok HashSet dopušta samo jednu null vrijednost.
HashMap djeluje na principu raspršivanja, što znači da koristi hash funkciju za mapiranje prepoznavanja vrijednosti interno koristeći algoritam raspršivanja kako bi se omogućilo jednostavno pretraživanje. Pravi hash mehanizam uvijek vraća isti hashCode () kada se primijeni na isti objekt. HashSet, s druge strane, interno koristi HashMap kao podrškunu strukturu podataka za dodavanje ili pohranu objekata. To znači da kada se stvori objekt HashSet-a, on će stvoriti objekt HashMap-a.
Iako i HashMap i HashSet nisu sinkronizirani što znači da nisu prikladni za sigurne operacije i da su potpuno različite konstrukcije, pružaju stalne vremenske performanse za osnovne operacije kao što su dodavanje, uklanjanje elementa itd. Iako je HashMap općenita namjena sučelje karte u koje se pohranjuju parovi ključ / vrijednost, HashSet je implementacija Set sučelja. HashSet koristi HashMap za podršku implementacije. HashMap, međutim, koristi hashing princip i pomoću njega se brzo lovi za ključem.