Når du lærer et nytt dataspråk, er en av de første tingene du pleier å spørre hvordan du arbeider med store grupper av data. Dette emnet blir ofte dekket under emnet "Datastrukturer". Hvis du graver dypere, må du komme rundt emner som koblede lister, køer, stabler og binære trær blant mange andre datastrukturer. I Java er disse strukturene en del av Java Collection Framework. En samling er bare en type datastruktur som refererer til en gruppering av flere dataelementer, og Java Collections Framework standardiserer måten som disse gruppene av objekter håndteres på. Faktisk var samlingsrammen utformet for å møte flere mål.
Hele samlingsrammen er utformet rundt et sett med standardgrensesnitt. Flere standard implementeringer som LinkedList, HashSet og TreeSet er gitt av disse grensesnittene som du kan like. I tillegg kan du også implementere din egen samling hvis du velger. Men i tillegg til samlinger definerer rammeverket flere kartgrensesnitt og klasser. Java inneholder tre generelle kart implementeringer - HashMap, TreeMap og LinkedHashMap - hvilke butikknøkkel / verdi par. Selv om kart ikke er tekniske samlinger, er de fullt integrert med samlinger. Faktisk fokuserer kart på grupper av tilknytning mellom objekter. Denne artikkelen oppsummerer de viktigste forskjellene mellom HashMap og HashSet.
HashMap er den mest brukte implementeringen av kartgrensesnittet som gir et grunnleggende nøkkel / verdikart hvor elementene er uordnede. Den bruker en spesiell verdi kalt en hashkode, i stedet for et saksomt søk på nøkkelen. Hash-koden er en måte å ta informasjon på i objektet og omdanne det til et "relativt unikt" int for objektet. Det fungerer bare på hashing-prinsippet, som betyr at det bruker en hash-funksjon for å kartlegge identifiserende verdier. Akkurat som Vector and Stack har sine erstatninger i ArrayList og LinkedList, har Hashtable en erstatning i HashMap. Det utvider AbstractMap for å implementere Map-grensesnittet ved hjelp av en intern Hashtable-representasjon. Og i likhet med andre generelle implementeringer, støtter HashMap de valgfrie metodene for Kart, tillater nullverdier, og er ikke synkronisert.
HashSet er en av medlemmene av Java Collections Framework som implementerer Set-grensesnittet, støttet av et hashbord som faktisk er en HashMap-forekomst. Som navnet antyder, er det implementert av et hashbord, en matrise der elementene lagres i en posisjon som er avledet fra innholdet. I motsetning til et kart er Set akkurat en samling med nøyaktig det samme grensesnittet, så det er ingen ekstra funksjonalitet som det finnes med to forskjellige lister. HashSet bruker en hashing-funksjon som er designet spesielt for raske oppslag. Det er en uordnet samling av unike objekter som ikke kan lagre dupliserte verdier. HashSet utvider AbstractSet klasse som implementerer Set grensesnitt. HashSet definerer imidlertid ikke noen andre metoder enn de som leveres av superklasser og grensesnitt.
HashMap er den mest brukte implementeringen av kartgrensesnittet som gir et grunnleggende nøkkel / verdikart hvor elementene er uordnede. Det fungerer bare på hashing-prinsippet, som betyr at det bruker en hash-funksjon for å kartlegge identifiserende verdier. HashSet, derimot, er en av medlemmene av Java Collections Framework som implementerer Set-grensesnittet, støttet av et hashbord som faktisk er en HashMap-forekomst. Enkelt sagt, implementerer HashMap Map-grensesnittet, mens HashSet implementerer Set-grensesnittet.
HashSet lager en samling som bruker et hashbord for lagring. Hash-tabellen lagrer informasjon ved hjelp av en metode som kalles hashing. HashSet bruker en hashing-funksjon, som er spesielt utviklet for rask oppslag, for å lagre elementer eller verdier. Det meste av HashSet-funksjonaliteten er gjennom AbstractCollection og AbstractSet-superklassen, som HashSet deler med TreeSet. HashMap utvider AbstractMap for å implementere Map-grensesnittet ved hjelp av en intern Hashtable-representasjon. Begge klassene er ikke synkronisert, noe som betyr at de ikke er egnet for trådsikker drift.
Fordi Map ikke støtter dupliserte nøkler, tillater HashMap ikke dupliserte nøkler, men det er tillatt å ha dupliserte verdier. Dette betyr at dupliserte verdier kan eksistere i HashMap, men du kan bruke samling som verdi mot noen nøkkel. Hver nøkkel må være unik i en HashMap, og en enkelt nøkkel kan ikke ha mer enn 1 verdi. HashSet, derimot, kan ikke ha dupliserte elementer ved bare definisjonen av et sett, noe som betyr at du ikke kan lagre dupliserte verdier i HashSet. HashMap tillater bare en null nøkkel, men tillater et antall nullverdier, mens HashSet tillater bare én nullverdi.
HashMap fungerer på hashing-prinsippet, som betyr at det bruker en hash-funksjon for å kartlegge identifiserende verdier internt ved hjelp av hashing-algoritmen for å muliggjøre enkel henting. En ekte hashing-mekanisme returnerer alltid den samme hashCode () når den brukes på samme objekt. HashSet, derimot, bruker internt HashMap som en støttedatastruktur for å legge til eller lagre objekter. Dette betyr at når et objekt av HashSet er opprettet, vil det opprette et objekt av HashMap.
Selv om både HashMap og HashSet ikke er synkronisert, noe som betyr at de ikke er egnet for trådsikker drift, og de er helt forskjellige konstruksjoner, gir de konstant tidsytelse for grunnleggende operasjoner som å legge til, fjerne element etc. Mens HashMap er en generell implementering av Kartgrensesnittet som lagrer nøkkel / verdi par, HashSet er en implementering av Set grensesnittet. En HashSet bruker en HashMap for å gjenopprette implementeringen. En HashMap bruker imidlertid hashing-prinsippet og bruker den til å raskt jakte på nøkkelen.