I Java, HashMap er en del af Javas samling siden Java 1.2. Denne klasse findes i java.util pakke. Det giver den grundlæggende implementering af kortgrænsefladen til Java. HashMap i Java gemmer dataene i (nøgle, værdi) par, og du kan få adgang til dem ved hjælp af et indeks af en anden type (f.eks. et heltal). Et objekt bruges som nøgle (indeks) til et andet objekt (værdi). Hvis du forsøger at indsætte duplikatnøglen i HashMap, vil den erstatte elementet i den tilsvarende nøgle.
Hvad er HashMap?
Java HashMap ligner HashTabel , men den er usynkroniseret. Det tillader også at gemme null-nøglerne, men der skal kun være ét null-nøgleobjekt, og der kan være et hvilket som helst antal null-værdier. Denne klasse giver ingen garantier for rækkefølgen af kortet. For at bruge denne klasse og dens metoder skal du importere java.util.HashMap pakke eller dens superklasse.
Indholdsfortegnelse
- Hvad er HashMap?
- Java HashMap eksempler
- HashMap-erklæring
- Hierarki af Java HashMap
- Oprettelse af HashMap i Java
- Java HashMap-konstruktører
- Udførelse af forskellige operationer på HashMap
- Kompleksiteten af HashMap i Java
- Intern struktur af HashMap
- Fordele og ulemper ved Java HashMap
Java HashMap eksempler
Nedenfor er implementeringen af et eksempel på Java HashMap:
Java
// Java program to illustrate HashMap class> // of java.util package> // Importing HashMap class> import> java.util.HashMap;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Create an empty hash map by declaring object> >// of string and integer type> >HashMap map =>new> HashMap();> >// Adding elements to the Map> >// using standard put() method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> >// Print size and content of the Map> >System.out.println(>'Size of map is:- '> >+ map.size());> >// Printing elements in object of Map> >System.out.println(map);> >// Checking if a key is present and if> >// present, print value by passing> >// random element> >if> (map.containsKey(>'vishal'>)) {> >// Mapping> >Integer a = map.get(>'vishal'>);> >// Printing value for the corresponding key> >System.out.println(>'value for key'> >+>' 'vishal' is:- '> + a);> >}> >}> }> |
>
>Produktion
Size of map is:- 3 {vaibhav=20, vishal=10, sachin=30} value for key 'vishal' is:- 10> HashMap Erklæring
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable>
Parametre:
Det kræver to parametre, nemlig som følger:
- Den type nøgler, der vedligeholdes af dette kort
- Typen af kortlagte værdier
Bemærk: K eys og værdi kan ikke være primitiv datatype. Nøglen i Hashmap er gyldig, hvis den implementeres hashCode() og equals() metoden , bør det også være uforanderligt (uforanderligt brugerdefineret objekt ), så hashkode og lighed forbliver konstant. Værdien i hashmap kan være en hvilken som helst wrapper-klasse, brugerdefinerede objekter, arrays, enhver referencetype eller endda null .
For eksempel : Hashmap kan have array som værdi, men ikke som nøgle.
HashMap i Java implementerer Serialiserbar , Kan klones , Kort interfaces.Java HashMap udvides Abstrakt kort klasse. De direkte underklasser er LinkedHashMap og PrinterStateReasons .
Hierarki af Java HashMap

Karakteristika for Java HashMap
Et HashMap er en datastruktur, der bruges til at gemme og hente værdier baseret på nøgler. Nogle af de vigtigste egenskaber ved et hashmap inkluderer:
- Hurtig adgangstid : HashMaps giver konstant tidsadgang til elementer, hvilket betyder, at hentning og indsættelse af elementer er meget hurtig, normalt O(1) tidskompleksitet.
- Bruger hashing-funktion : HashMaps bruger en hash-funktion til at kortlægge nøgler til indekser i en matrix. Dette giver mulighed for et hurtigt opslag af værdier baseret på nøgler.
- Gemmer nøgleværdi-par: Hvert element i et HashMap består af et nøgleværdi-par. Nøglen bruges til at slå den tilknyttede værdi op.
- Understøtter null-nøgler og værdier : HashMaps tillader null-værdier og nøgler. Det betyder, at en null-nøgle kan bruges til at gemme en værdi, og en null-værdi kan tilknyttes en nøgle.
- Ikke bestilt: HashMaps er ikke bestilt, hvilket betyder, at den rækkefølge, som elementer tilføjes til kortet, ikke bevares. LinkedHashMap er dog en variant af HashMap, der bevarer indsættelsesrækkefølgen.
- Tillader dubletter : HashMaps tillader duplikerede værdier, men ikke dublerede nøgler. Hvis der tilføjes en dubletnøgle, overskrives den tidligere værdi, der er knyttet til nøglen.
- Tråd-usikker : HashMaps er ikke trådsikre, hvilket betyder, at hvis flere tråde får adgang til det samme hashmap samtidigt, kan det føre til datainkonsekvenser. Hvis trådsikkerhed er påkrævet, kan ConcurrentHashMap bruges.
- Kapacitet og belastningsfaktor : HashMaps har en kapacitet, som er antallet af elementer, som den kan indeholde, og en belastningsfaktor, som er et mål for, hvor fuld hashkortet kan være, før det ændres i størrelse.
Oprettelse af HashMap i Java
Lad os forstå, hvordan vi kan oprette HashMap i Java med et eksempel nævnt nedenfor:
Java
vlc download youtube
// Java Program to Create> // HashMap in Java> import> java.util.HashMap;> // Driver Class> public> class> ExampleHashMap {> >// main function> >public> static> void> main(String[] args) {> > >// Create a HashMap> >HashMap hashMap =>new> HashMap();> > >// Add elements to the HashMap> >hashMap.put(>'John'>,>25>);> >hashMap.put(>'Jane'>,>30>);> >hashMap.put(>'Jim'>,>35>);> > >// Access elements in the HashMap> >System.out.println(hashMap.get(>'John'>));> >// Output: 25> > >// Remove an element from the HashMap> >hashMap.remove(>'Jim'>);> > >// Check if an element is present in the HashMap> >System.out.println(hashMap.containsKey(>'Jim'>));> >// Output: false> > >// Get the size of the HashMap> >System.out.println(hashMap.size());> >// Output: 2> >}> }> |
>
>Produktion
25 false 2>
Java HashMap-konstruktører
HashMap leverer 4 konstruktører, og adgangsmodifikatoren for hver er offentlig, som er opført som følger:
- HashMap()
- HashMap(int initialCapacity)
- HashMap(int initialCapacity, float loadFactor)
- HashMap(Kortkort)
Diskuter nu ovenstående konstruktører én efter én ved siden af implementering af det samme ved hjælp af rene Java-programmer.
1. HashMap()
Det er standardkonstruktøren, der opretter en instans af HashMap med en initial kapacitet på 16 og en belastningsfaktor på 0,75.
Syntaks:
HashMap hm = new HashMap();>
Eksempel
Java
// Java program to Demonstrate the HashMap() constructor> // Importing basic required classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap();> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap();> >// Adding elements using put method> >// Custom input elements> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Print and display mapping of HashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Print and display mapping of HashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>Produktion
Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}> 2. HashMap(int initialCapacity)
Det opretter en HashMap-instans med en specificeret initial kapacitet og belastningsfaktor på 0,75.
Syntaks:
HashMap hm = new HashMap(int initialCapacity);>
Eksempel
Bourne igen shell
Java
// Java program to Demonstrate> // HashMap(int initialCapacity) Constructor> // Importing basic classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> AddElementsToHashMap {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap(>10>);> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap(>2>);> >// Adding elements to object of HashMap> >// using put method> >// HashMap 1> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >// HashMap 2> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Printing elements of HashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Printing elements of HashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>Produktion
Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}> 3. HashMap(int initialCapacity, float loadFactor)
Det opretter en HashMap-instans med en specificeret startkapacitet og specificeret belastningsfaktor.
Syntaks:
HashMap hm = new HashMap(int initialCapacity, float loadFactor);>
Eksempel
Java
// Java program to Demonstrate> // HashMap(int initialCapacity,float loadFactor) Constructor> // Importing basic classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the generic type twice> >HashMap hm1> >=>new> HashMap(>5>,>0>.75f);> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap(>3>,>0>.5f);> >// Add Elements using put() method> >// Custom input elements> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Print and display elements in object of hashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Print and display elements in object of hashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>Produktion
Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}> 4. HashMap(Kortkort)
Det opretter en forekomst af HashMap med de samme tilknytninger som det angivne kort.
HashMap hm = new HashMap(Map map);
Java
// Java program to demonstrate the> // HashMap(Map map) Constructor> import> java.io.*;> import> java.util.*;> class> AddElementsToHashMap {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Map hm1 =>new> HashMap();> >// Add Elements using put method> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >// Initialization of a HashMap> >// using Generics> >HashMap hm2> >=>new> HashMap(hm1);> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> > >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>Produktion
Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {1=one, 2=two, 3=three}> Udførelse af forskellige operationer på HashMap
1. Tilføjelse af elementer i HashMap i Java
For at tilføje et element til kortet kan vi bruge sætte() metode. Indsættelsesrækkefølgen bibeholdes dog ikke i Hashmap. Internt genereres der for hvert element en separat hash, og elementerne indekseres baseret på denne hash for at gøre den mere effektiv.
Java
// Java program to add elements> // to the HashMap> import> java.io.*;> import> java.util.*;> class> AddElementsToHashMap {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap();> >// Initialization of a HashMap> >// using Generics> >HashMap hm2> >=>new> HashMap();> >// Add Elements using put method> >hm1.put(>1>,>'Geeks'>);> >hm1.put(>2>,>'For'>);> >hm1.put(>3>,>'Geeks'>);> >hm2.put(>1>,>'Geeks'>);> >hm2.put(>2>,>'For'>);> >hm2.put(>3>,>'Geeks'>);> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }> |
>
>Produktion
streng.indeholder java
Mappings of HashMap hm1 are : {1=Geeks, 2=For, 3=Geeks} Mapping of HashMap hm2 are : {1=Geeks, 2=For, 3=Geeks}> 2. Ændring af elementer i HashMap i Java
Efter tilføjelse af elementerne, hvis vi ønsker at ændre elementet, kan det gøres ved igen at tilføje elementet med sætte() metode. Da elementerne i kortet er indekseret ved hjælp af tasterne, kan værdien af nøglen ændres ved blot at indsætte den opdaterede værdi for den nøgle, som vi ønsker at ændre.
Java
// Java program to change> // elements of HashMap> import> java.io.*;> import> java.util.*;> class> ChangeElementsOfHashMap {> >public> static> void> main(String args[])> >{> >// Initialization of a HashMap> >HashMap hm> >=>new> HashMap();> >// Change Value using put method> >hm.put(>1>,>'Geeks'>);> >hm.put(>2>,>'Geeks'>);> >hm.put(>3>,>'Geeks'>);> >System.out.println(>'Initial Map '> + hm);> >hm.put(>2>,>'For'>);> >System.out.println(>'Updated Map '> + hm);> >}> }> |
>
>Produktion
Initial Map {1=Geeks, 2=Geeks, 3=Geeks} Updated Map {1=Geeks, 2=For, 3=Geeks}> 3. Fjernelse af element fra Java HashMap
For at fjerne et element fra kortet kan vi bruge fjerne() metode. Denne metode tager nøgleværdien og fjerner tilknytningen for en nøgle fra dette kort, hvis den er til stede på kortet.
Java
// Java program to remove> // elements from HashMap> import> java.io.*;> import> java.util.*;> class> RemoveElementsOfHashMap{> >public> static> void> main(String args[])> >{> >// Initialization of a HashMap> >Map hm> >=>new> HashMap();> >// Add elements using put method> >hm.put(>1>,>'Geeks'>);> >hm.put(>2>,>'For'>);> >hm.put(>3>,>'Geeks'>);> >hm.put(>4>,>'For'>);> >// Initial HashMap> >System.out.println(>'Mappings of HashMap are : '> >+ hm);> >// remove element with a key> >// using remove method> >hm.remove(>4>);> >// Final HashMap> >System.out.println(>'Mappings after removal are : '> >+ hm);> >}> }> |
>
>Produktion
Mappings of HashMap are : {1=Geeks, 2=For, 3=Geeks, 4=For} Mappings after removal are : {1=Geeks, 2=For, 3=Geeks}> 4. Gennemgang af Java HashMap
Vi kan bruge Iterator-grænsefladen til at krydse enhver struktur i Collection Framework. Da iteratorer arbejder med én type data, bruger vi Entry til at løse de to separate typer i et kompatibelt format. Ved hjælp af næste()-metoden udskriver vi indtastningerne af HashMap.
Java
// Java program to traversal a> // Java.util.HashMap> import> java.util.HashMap;> import> java.util.Map;> public> class> TraversalTheHashMap {> >public> static> void> main(String[] args)> >{> >// initialize a HashMap> >HashMap map =>new> HashMap();> >// Add elements using put method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> >// Iterate the map using> >// for-each loop> >for> (Map.Entry e : map.entrySet())> >System.out.println(>'Key: '> + e.getKey()> >+>' Value: '> + e.getValue());> >}> }> |
>
>Produktion
Key: vaibhav Value: 20 Key: vishal Value: 10 Key: sachin Value: 30>
HashMaps kompleksitet i Java
HashMap giver konstant tidskompleksitet for grundlæggende operationer, get og put, hvis hash-funktionen er korrekt skrevet, og den spreder elementerne korrekt blandt spandene. Iteration over HashMap afhænger af kapaciteten af HashMap og antallet af nøgle-værdi-par. Grundlæggende er det direkte proportionalt med kapaciteten + størrelsen. Kapacitet er antallet af buckets i HashMap. Så det er ikke en god idé at have et højt antal buckets i HashMap i starten.
linux hvordan man omdøber en mappe
| Metoder | Tidskompleksitet | Rumkompleksitet |
|---|---|---|
| Tilføjelse af elementer i HashMap | O(1) | PÅ) |
| Fjerner element fra HashMap | O(1) | PÅ) |
| Udpakning af element fra Java | O(1) | PÅ) |
Vigtige funktioner i HashMap
For at få adgang til en værdi skal man kende dens nøgle. HashMap er kendt som HashMap, fordi det bruger en teknik kaldet Hashing. Hashing er en teknik til at konvertere en stor streng til en lille streng, der repræsenterer den samme streng. En kortere værdi hjælper med indeksering og hurtigere søgninger. HashSet bruger også HashMap internt.
Et par vigtige funktioner i HashMap er:
- HashMap er en del af java.util-pakken.
- HashMap udvider en abstrakt klasse AbstractMap, som også giver en ufuldstændig implementering af kortgrænsefladen.
- Den implementerer også en Kan klones og Serialiserbar grænseflader. K og V i ovenstående definition repræsenterer henholdsvis nøgle og værdi.
- HashMap tillader ikke dublerede nøgler, men tillader duplikerede værdier. Det betyder, at en enkelt nøgle ikke kan indeholde mere end 1 værdi, men mere end 1 nøgle kan indeholde en enkelt værdi.
- HashMap tillader også en null-nøgle, men kun én gang og flere null-værdier.
- Denne klasse giver ingen garantier med hensyn til rækkefølgen af kortet; Det garanterer især ikke, at ordren vil forblive konstant over tid. Det ligner nogenlunde HashTable, men er usynkroniseret.
Intern struktur af HashMap
Internt indeholder HashMap et array af Node, og en node er repræsenteret som en klasse, der indeholder 4 felter:
- int hash
- K nøgle
- V værdi
- Node næste
Det kan ses, at noden indeholder en reference til sit eget objekt. Så det er en sammenkædet liste.
HashMap:

Node:

Ydelse af HashMap
Ydeevnen af HashMap afhænger af 2 parametre, som er navngivet som følger:
- Oprindelig kapacitet
- Belastningsfaktor
1. Startkapacitet – Det er kapaciteten af HashMap på tidspunktet for dets oprettelse (det er antallet af buckets en HashMap kan rumme, når HashMap er instansieret). I java er det 2^4=16 i starten, hvilket betyder, at det kan indeholde 16 nøgleværdi-par.
skjulte apps2. Belastningsfaktor – Det er procentværdien af kapaciteten, hvorefter kapaciteten af Hashmap skal øges (Det er den procentvise fyldning af spande, hvorefter Rehashing finder sted). I java er det 0.75f som standard, hvilket betyder, at genhasningen finder sted efter at have fyldt 75% af kapaciteten.
3. Tærskel – Det er produktet af belastningsfaktor og startkapacitet. I java er det som standard (16 * 0,75 = 12). Det vil sige, at Rehashing finder sted efter indsættelse af 12 nøgle-værdi-par i HashMap.
4. Genhaskning – Det er processen med at fordoble kapaciteten af HashMap, efter det når sin tærskel. I java fortsætter HashMap med at rehash (som standard) i følgende rækkefølge - 2^4, 2^5, 2^6, 2^7, …. snart.
Hvis den oprindelige kapacitet holdes højere, vil rehashing aldrig blive udført. Men ved at holde det højere øger iterationens tidskompleksitet. Så det bør vælges meget smart for at øge ydeevnen. Det forventede antal værdier bør tages i betragtning for at indstille den oprindelige kapacitet. Den mest generelt foretrukne belastningsfaktorværdi er 0,75, hvilket giver en god del mellem tids- og pladsomkostninger. Belastningsfaktorens værdi varierer mellem 0 og 1.
Bemærk: Fra Java 8 og frem er Java begyndt at bruge Self Balancing BST i stedet for en sammenkædet liste til kæde. Fordelen ved selvbalancerende bst er, at vi får det værste tilfælde (når hver nøgle kortlægger den samme plads) søgetiden er O(Log n).
Synkroniseret HashMap
Som det siges, at HashMap er usynkroniseret, dvs. flere tråde kan få adgang til det samtidigt. Hvis flere tråde får adgang til denne klasse samtidigt, og mindst én tråd manipulerer den strukturelt, er det nødvendigt at gøre den synkroniseret eksternt. Det gøres ved at synkronisere et eller andet objekt, som indkapsler kortet. Hvis der ikke findes et sådant objekt, kan det pakkes rundt om Collections.synchronizedMap() for at gøre HashMap synkroniseret og undgå utilsigtet usynkroniseret adgang. Som i følgende eksempel:
Map m = Collections.synchronizedMap(new HashMap(...));>
Nu er Map m synkroniseret. Iteratorer af denne klasse er fejl-hurtige, hvis der foretages strukturændringer efter oprettelsen af iteratoren, på nogen måde undtagen gennem iteratorens fjernelsesmetode. Hvis en iterator fejler, vil den kaste ConcurrentModificationException.
Anvendelser af HashMap:
HashMap er hovedsageligt implementeringen af hashing. Det er nyttigt, når vi har brug for effektiv implementering af søge-, indsæt- og sletningsoperationer. Der henvises til applikationer af hashing for detaljer.
Metoder i HashMapassociate
- K – Typen af tasterne på kortet.
- I – Den type værdier, der er kortlagt på kortet.
| Metode | Beskrivelse |
|---|---|
| klar() | Fjerner alle tilknytninger fra dette kort. |
| klone() | Returnerer en overfladisk kopi af denne HashMap-instans: selve nøglerne og værdierne klones ikke. |
| compute(K-tast, BiFunction ? super V,? udvider V> remappingFunction) | Forsøg på at beregne en mapping for den angivne nøgle og dens aktuelle kortlagte værdi (eller null, hvis der ikke er nogen aktuel mapping). |
| computeIfAbsent(K-tast, funktion super K,? udvider V> mappingFunction) | Hvis den angivne nøgle ikke allerede er knyttet til en værdi (eller er afbildet til null), forsøger du at beregne dens værdi ved hjælp af den givne tilknytningsfunktion og indtaster den i dette kort, medmindre null. |
| computeIfPresent(K-tast, BiFunction ? super V,? udvider V> remappingFunction) | Hvis værdien for den angivne nøgle er til stede og ikke er nul, forsøger man at beregne en ny mapping givet nøglen og dens aktuelle tilknyttede værdi. |
| containsKey(Objektnøgle) | Returnerer sand, hvis dette kort indeholder en tilknytning til den angivne nøgle. |
| indeholderVærdi(objektværdi) | Returnerer sand, hvis dette kort knytter en eller flere nøgler til den angivne værdi. |
| entrySet() | Returnerer en Set-visning af kortlægningerne på dette kort. |
| get (objektnøgle) | Returnerer den værdi, som den angivne nøgle er knyttet til, eller null, hvis dette kort ikke indeholder nogen tilknytning til nøglen. |
| er tom() | Returnerer sand, hvis dette kort ikke indeholder nøgleværdi-tilknytninger. |
| keySet() | Returnerer en Set-visning af nøglerne på dette kort. |
| flette (K-tast, V-værdi, BiFunction ? super V,? udvider V> remappingFunction) | Hvis den angivne nøgle ikke allerede er knyttet til en værdi eller er knyttet til null, skal du tilknytte den til den givne ikke-nul værdi. |
| put (K-tast, V-værdi) | Knytter den angivne værdi til den angivne nøgle i dette kort. |
| putAll(Map m) | Kopierer alle tilknytninger fra det angivne kort til dette kort. |
| fjern (objektnøgle) | Fjerner tilknytningen for den angivne nøgle fra dette kort, hvis den findes. |
| størrelse() | Returnerer antallet af nøgleværdi-tilknytninger i dette kort. |
| værdier() | Returnerer en samlingsvisning af værdierne på dette kort. |
Metoder arvet fra klassen java.util.AbstractMap
| METODE | BESKRIVELSE |
|---|---|
| lige med() | Sammenligner det angivne objekt med dette kort for lighed. |
| hashCode() | Returnerer hash-kodeværdien for dette kort. |
| toString() | Returnerer en strengrepræsentation af dette kort. |
Metoder nedarvet fra interface java.util.Map
| METODE | BESKRIVELSE |
|---|---|
| lige med() | Sammenligner det angivne objekt med dette kort for lighed. |
| forEach(BiConsumer action) | Udfører den givne handling for hver post i dette kort, indtil alle poster er blevet behandlet, eller handlingen giver en undtagelse. |
| getOrDefault(Objektnøgle, V defaultValue) | Returnerer den værdi, som den angivne nøgle er knyttet til, eller standardværdi, hvis dette kort ikke indeholder nogen tilknytning til nøglen. |
| hashCode() | Returnerer hash-kodeværdien for dette kort. |
| putIfFraværende(K-nøgle, V-værdi) | Hvis den angivne nøgle ikke allerede er knyttet til en værdi (eller er knyttet til null), knytter den til den givne værdi og returnerer null, ellers returnerer den aktuelle værdi. |
| fjern (objektnøgle, objektværdi) | Fjerner kun posten for den angivne nøgle, hvis den i øjeblikket er knyttet til den angivne værdi. |
| erstat (K-tast, V-værdi) | Erstatter kun indgangen for den angivne nøgle, hvis den i øjeblikket er knyttet til en eller anden værdi. |
| erstatte (K-tast, V oldValue, V newValue) | Erstatter kun indgangen for den angivne nøgle, hvis den i øjeblikket er knyttet til den angivne værdi. |
| replaceAll (BiFunction funktion) | Erstatter hver posts værdi med resultatet af at kalde den givne funktion på den post, indtil alle poster er blevet behandlet, eller funktionen kaster en undtagelse. |
Fordele ved Java HashMap
- Hurtig hentning: HashMaps giver konstant tidsadgang til elementer, hvilket betyder, at hentning og indsættelse af elementer er meget hurtig.
- Effektiv opbevaring : HashMaps bruger en hashing-funktion til at kortlægge nøgler til indekser i en matrix. Dette giver mulighed for hurtigt opslag af værdier baseret på nøgler og effektiv lagring af data.
- Fleksibilitet : HashMaps tillader null-nøgler og værdier og kan gemme nøgle-værdi-par af enhver datatype.
- Let at bruge : HashMaps har en enkel grænseflade og kan nemt implementeres i Java.
- Velegnet til store datasæt : HashMaps kan håndtere store datasæt uden at bremse.
Ulemper ved Java HashMap
- Uordnet : HashMaps er ikke bestilt, hvilket betyder, at den rækkefølge, som elementer tilføjes til kortet, ikke bevares.
- Ikke trådsikker : HashMaps er ikke trådsikre, hvilket betyder, at hvis flere tråde får adgang til det samme hashmap samtidigt, kan det føre til datainkonsekvenser.
- Ydeevne kan forringes : I nogle tilfælde, hvis hashing-funktionen ikke er korrekt implementeret, eller hvis belastningsfaktoren er for høj, kan ydeevnen af et HashMap forringes.
- Mere kompleks end arrays eller lister : HashMaps kan være mere komplekse at forstå og bruge end simple arrays eller lister, især for begyndere.
- Højere hukommelsesforbrug : Da HashMaps bruger et underliggende array, kan de bruge mere hukommelse end andre datastrukturer som arrays eller lister. Dette kan være en ulempe, hvis hukommelsesbrug er et problem.
Læs også
- Hashmap vs Treemap
- Hashmap vs HashTable
- Seneste artikler om Java HashMap
Ofte stillede spørgsmål om Java HashMap
1. Hvad er et HashMap i Java?
HashMap i Java er klassen fra samlingsrammen, der kan gemme nøgleværdi-par inde i den.
2. Hvorfor bruge HashMap i Java?
HashMap i Java bruges til lagring af nøgle-værdi-par, hvor hver nøgle er unik.
3. Hvad er fordelen ved HashMap?
HashMap bruges, fordi det giver funktioner som:
- Hurtig hentning
- Effektiv opbevaring
- Fleksibel at bruge
- Let at bruge
- Velegnet til store datasæt