what is hashmap java
Denne Java HashMap-opplæringen forklarer hva som er en HashMap i Java og hvordan du bruker den. Det inkluderer Hvordan erklære, initialisere, Iterere, implementere og skrive ut HashMap:
HashMap i Java er en samling basert på Map og består av nøkkelverdipar. Et HashMap er betegnet med eller. Et HashMap-element kan nås ved hjelp av en nøkkel, dvs. vi må kjenne nøkkelen for å få tilgang til HashMap-elementet.
En HashMap bruker en teknikk som heter “Hashing”. I hashing blir en lengre streng konvertert til en kortere streng ved å bruke en eller annen algoritme eller 'hash-funksjon'. En streng konverteres til en kortere streng da den hjelper til med å søke raskere. Den brukes også til effektiv indeksering.
=> Besøk her for den eksklusive opplæringsserien for Java Training.
Hva du vil lære:
- HashMap i Java
- Java Map Vs HashMap
- Konklusjon
HashMap i Java
En HashMap ligner HashTable med en forskjell at HashMap ikke er synkronisert og tillater nullverdier for nøkkel og verdi.
Noen av de viktigste egenskapene til HashMap er gitt nedenfor:
- HashMap er implementert i Java i klassen “Hashmap” som er en del av java.util-pakken.
- HashMap-klassen arver fra klassen “AbstractMap” som delvis implementerer Map-grensesnittet.
- HashMap implementerer også 'klonable' og 'serialiserbare' grensesnitt.
- HashMap tillater dupliserte verdier, men tillater ikke dupliserte nøkler. HashMap tillater også flere nullverdier, men en nullnøkkel kan bare være én.
- HashMap er usynkronisert og garanterer heller ikke rekkefølgen til elementene.
- Java HashMap-klassen har en startkapasitet på 16 og standard (initial) belastningsfaktor er 0,75.
Hvordan erklære jeg et HashMap i Java?
Et HashMap i Java er en del av pakken java.util. Derfor, hvis vi trenger å bruke HashMap i koden vår, må vi først importere implementeringsklassen ved hjelp av ett av følgende utsagn:
import java.util.*;
ELLER
import java.util.HashMap;
Den generelle erklæringen om HashMap-klassen er:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
Her er K => type nøkler som er tilstede på kartet
V => type verdier kartlagt til tastene på kartet
Lag et HashMap
En HashMap i Java kan opprettes som følger:
import java.util.HashMap; HashMap cities_map = new HashMap ();
Ovennevnte uttalelse inkluderer først HashMap-klassen i Java. Så i neste uttalelse oppretter vi et HashMap med navnet ‘towns_map’ med nøkkeltype som Heltall og Verdier som String.
Når HashMap er opprettet, må vi initialisere det med verdier.
Hvordan initialisere Hash-kart?
Vi kan initialisere HashMap ved hjelp av put-metoden ved å sette noen verdier i kartet.
Programmet nedenfor viser initialiseringen av HashMap i Java.
import java.util.*; class Main{ public static void main(String args[]){ //create a HashMap and print HashMap colorsMap=new HashMap(); System.out.println('Initial Map: '+colorsMap); //put some initial values into it using put method colorsMap.put(100,'Red'); colorsMap.put(101,'Green'); colorsMap.put(102,'Blue'); //print the HashMap System.out.println('After adding elements:'); for(Map.Entry m:colorsMap.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } } }
Produksjon:
Innledende kart: {}
Etter å ha lagt til elementer:
100 Nettverk
101 Grønn
102 Blå
Hvordan fungerer et HashMap internt?
Vi vet at HashMap er en samling av nøkkelverdipar, og den bruker en teknikk som heter ‘Hashing’. Internt er HashMap en rekke noder. HashMap bruker array og LinkedList for å lagre nøkkelverdipar.
Nedenfor er en struktur av en node av HashMap som er programmatisk representert som en klasse.
Som det fremgår av noderepresentasjonen ovenfor, har en node en struktur som ligner på en koblet listenode. En rekke av disse nodene kalles Bucket. Hver bøtte har kanskje ikke samme kapasitet, og den kan også ha mer enn en node.
Ytelsen til HashMap påvirkes av to parametere:
(i) Startkapasitet: Kapasitet er definert som antall bøtter i HashMap. Initial Capacity er definert som kapasiteten til HashMap-objektet når det opprettes. Kapasiteten til HashMap multipliseres alltid med 2.
(ii) LoadFactor: LoadFactor er parameteren som måles når du vasker - det vil øke kapasiteten.
Vær oppmerksom på at hvis kapasiteten er høy, vil belastningsfaktoren være liten, da det ikke er behov for oppvask. På samme måte, når kapasiteten er lav, vil belastningsfaktoren være høy ettersom vi trenger å vaske ofte. Derfor bør vi være forsiktige med å nøye velge disse to faktorene for å utforme et effektivt hashMap.
Hvordan Iterere et HashMap?
HashMap må krysses for å manipulere eller skrive ut nøkkelverdiparene.
Det er to måter vi kan krysse eller gjenta gjennom HashMap.
- Bruker for loop
- Bruker mens sløyfen og iteratoren.
Java-programmet nedenfor viser implementeringen av begge disse metodene.
Først henter vi settet med oppføringer fra HashMap ved hjelp av entrySet-metoden, og deretter krysser vi settet ved hjelp av for loop. Deretter skriver vi ut nøkkelverdiparene ved å bruke henholdsvis getKey () og getValue () -metodene.
For å krysse HashMap ved hjelp av en while-løkke, setter vi først en iterator for HashMap og får deretter tilgang til nøkkelverdiparene ved hjelp av iteratoren.
import java.util.*; public class Main{ public static void main(String [] args) { //create a HashMap and initialize it HashMap cities_map = new HashMap(); cities_map.put(10, 'MUM'); cities_map.put(1, 'DL'); cities_map.put(20, 'PUN'); cities_map.put(7, 'GOA'); cities_map.put(3, 'HYD'); //print using for loop System.out.println('HashMap using for Loop:'); System.out.println(' KEY VALUE'); for (Map.Entry mapSet : cities_map.entrySet()) { System.out.println(' '+mapSet.getKey() + ' ' + mapSet.getValue()); } //print using while loop with iterator System.out.println('HashMap using while Loop:'); System.out.println(' KEY VALUE'); Iterator iterator = cities_map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry mapSet2 = (Map.Entry) iterator.next(); System.out.println(' '+mapSet2.getKey() + ' ' + mapSet2.getValue()); } } }
Produksjon:
HashMap bruker for Loop:
NØKKELVERDI
1 DL
3 LANGT
20 PUN
7 GOA
10 MUMMER
HashMap bruker mens Loop:
NØKKELVERDI
1 DL
3 LANGT
20 PUN
7 GOA
10 MUMMER
Skriv ut et Hash-kart
La oss se et annet eksempel på utskrift av hashMap ved hjelp av foreach-sløyfen vist i programmet nedenfor.
import java.util.HashMap; public class Main { public static void main(String[] args) { // create a HashMap and initialize HashMap colors = new HashMap(); colors.put('Red', 1); colors.put('Orange', 5); colors.put('Magenta', 8); //print the HashMap System.out.println('HashMap contents:'); System.out.println(' KEY VALUE'); for (String i : colors.keySet()) { System.out.println(' ' + i + ' ' + colors.get(i)); } } }
Produksjon:
HashMap innhold:
NØKKELVERDI
Nettverk 1
Magenta 8
Oransje 5
HashMap-konstruktør / metoder i Java
Tabellene nedenfor viser konstruktørene og metodene som tilbys av HashMap-klassen i Java.
Konstruktører
Konstruktørprototype | Beskrivelse | |
---|---|---|
putt alle | void putAll (Kartkart) | Setter inn spesifiserte kartelementer i HashMap. |
HashMap () | Standard konstruktør. | |
HashMap (Kart m) | Oppretter et nytt HashMap fra det gitte kartobjektet m. | |
HashMap (int kapasitet) | Oppretter et nytt HashMap med den opprinnelige kapasiteten gitt av argumentet 'kapasitet'. | |
HashMap (int kapasitet, float loadFactor) | Oppretter et nytt HashMap ved hjelp av verdiene av kapasitet og loadFactor levert av konstruktøren. |
Metoder
Metode | Metode Prototype | Beskrivelse |
---|---|---|
klar | ugyldig klart () | Fjerner alle tilordningene i HashMap |
er tom | boolsk isEmpty () | Sjekker om HashMap er tomt. Returnerer sant hvis ja. |
klone | Objektklon () | Returnerer en grunne kopi uten å klone nøkkel- og verdikartleggingen i HashMap. |
entrySet | Set entrySet () | Returnerer kartlegginger i HashMap som en samling |
tastesett | Set keySet () | Returnerer et sett med nøkler i HashMap. |
sette | V put (Objektnøkkel, Objektverdi) | Setter inn en nøkkelverdioppføring i HashMap. |
putIfAbsent | V putIfAbsent (K-tast, V-verdi) | Setter inn gitt nøkkelverdipar i HashMap hvis det ikke allerede er til stede. |
ta vekk | V fjerne (Objektnøkkel) | Slett en oppføring fra HashMap for den gitte nøkkelen. |
ta vekk | boolsk fjern (Objektnøkkel, Objektverdi) | Sletter det gitte nøkkelverdiparet fra HashMap. |
beregne | V beregne (K-tast, BiFunction remappingFunction) | Beregner kartlegging ved hjelp av 'remappingfunction' for den gitte nøkkelen og dens nåværende verdi eller nullverdi. |
Metode | Metode Prototype | Beskrivelse |
computeIfAbsent | V computeIfAbsent (K-tast, Funksjon mappingFunction) | Beregner kartleggingen ved hjelp av 'mappingFunction' og setter inn nøkkelverdipar hvis den ikke allerede er til stede eller er null. |
computeIfPresent | V computeIfPresent (K-tast, BiFunction remappingFunction) | Beregner en ny kartlegging ved hjelp av 'remappingFunction' gitt nøkkelen hvis nøkkelen allerede er tilstede og ikke-null. |
inneholder verdi | boolean containsValue (Objektverdi) | Sjekker om den gitte verdien finnes i HashMap og returnerer true hvis ja. |
inneholder nøkkel | boolsk inneholderKey (Objektnøkkel) | Sjekker om den gitte nøkkelen er til stede i HashMap og returnerer true hvis ja. |
er lik | boolsk lik (Objekt o) | Sammenligner gitt objekt med HashMap. |
for hver | ugyldig forEach (BiConsumer action) | Utfører gitt 'handling' for hver av oppføringene i HashMap. |
få | V get (Objektnøkkel) | Returnerer objektet som inneholder den gitte nøkkelen med tilhørende verdi. |
getOrDefault | V getOrDefault (Objektnøkkel, V defaultValue) | Returnerer verdien den gitte nøkkelen er kartlagt til. Hvis ikke kartlagt, returneres standardverdien. |
er tom | boolsk isEmpty () | Sjekker om HashMap er tomt. |
gå | V flette (K-tast, V-verdi, BiFunction remappingFunction) | Sjekker om den gitte nøkkelen er null eller ikke assosiert med verdi, og knytter den deretter til en ikke-null verdi ved hjelp av remappingFunction. |
erstatte | V erstatt (K-tast, V-verdi) | Erstatter den gitte verdien for den angitte nøkkelen. |
erstatte | boolsk erstatning (K-tast, V oldValue, V newValue) | Erstatter den gamle verdien til den gitte nøkkelen med den nye verdien |
erstatte alle | ugyldig erstatte alle (BiFunction-funksjon) | Utfører den gitte funksjonen og erstatter alle verdier i HashMap med funksjonsresultatet. |
verdier | Samlingsverdier () | Returnerer samlingen av verdier som er tilstede i HashMap. |
størrelse | int størrelse () | Returnerer størrelsen på antall oppføringer i HashMap. |
Hashmap Implementering
Deretter vil vi implementere de fleste av disse funksjonene i et Java-program for å forstå at de fungerer bedre.
Følgende Java-program viser en implementering av HashMap i Java. Merk at vi har brukt de fleste metodene vi diskuterte ovenfor.
import java.util.*; public class Main { public static void main(String args[]) { HashMap hash_map = new HashMap(); hash_map.put(12, 'Leo'); hash_map.put(2, 'Seville'); hash_map.put(7, 'Lacy'); hash_map.put(49, 'Lily'); hash_map.put(3, 'Dillon'); System.out.println('HashMap contents:'); System.out.println(' KEY VALUE'); //display HashMap contents Set setIter = hash_map.entrySet(); Iterator map_iterator = setIter.iterator(); while(map_iterator.hasNext()) { Map.Entry map_entry = (Map.Entry)map_iterator.next(); System.out.println(' '+ map_entry.getKey() + ' ' + map_entry.getValue()); } //get value for the given key String var= hash_map.get(2); System.out.println('Value at index 2 is: '+var); //delete value given the key hash_map.remove(3); System.out.println('Hashmap after removal:'); System.out.println(' KEY VALUE'); Set iter_set = hash_map.entrySet(); Iterator iterator = iter_set.iterator(); while(iterator.hasNext()) { Map.Entry mentry = (Map.Entry)iterator.next(); System.out.println(' '+mentry.getKey() + ' ' + mentry.getValue() ); } } }
Produksjon:
HashMap innhold:
NØKKELVERDI
49 Lilje
2 Sevilla
3 Dillon
7 Lacy
12 Leo
Verdien ved indeks 2 er: Sevilla
Hashmap etter fjerning:
NØKKELVERDI
49 Lilje
2 Sevilla
7 Lacy
12 Leo
Sorter HashMap i Java
I Java bevarer ikke HashMap ordren. Derfor må vi sortere elementene i HashMap. Vi kan sortere elementene i HashMap enten basert på nøkler eller verdier. I denne delen vil vi diskutere begge sorteringsmetodene.
Sorter HashMap etter nøkler
import java.util.*; public class Main { public static void main(String[] args) { //create and initialize a HashMap HashMap colors_map = new HashMap(); colors_map.put(9, 'Magenta'); colors_map.put(11, 'Yellow'); colors_map.put(7, 'Cyan'); colors_map.put(23, 'Brown'); colors_map.put(5, 'Blue'); colors_map.put(3, 'Green'); colors_map.put(1, 'Red'); //print the unsorted HashMap by getting a set and using iterator System.out.println('Unsorted HashMap:'); Set set = colors_map.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry me = (Map.Entry)iterator.next(); System.out.print(me.getKey() + ': '); System.out.println(me.getValue()); } //create a treemap from given HashMap so that the keys are sorted Map map = new TreeMap(colors_map); System.out.println('HashMap Sorted on keys:'); //print the sorted HashMap Set set2 = map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry me2 = (Map.Entry)iterator2.next(); System.out.print(me2.getKey() + ': '); System.out.println(me2.getValue()); } } }
Produksjon:
Usortert HashMap:
1: Nettverk
3: Grønn
5: Blå
7: Cyan
23: Brun
9: Magenta
11: Gul
HashMap sortert på taster:
1: Nettverk
3: Grønn
5: Blå
7: Cyan
9: Magenta
11: Gul
23: Brun
I programmet ovenfor ser vi at når hashmap er definert og fylt med verdier, lager vi et trekart fra dette hashmap. Når hashmap konverteres til et trekart, blir nøklene sortert automatisk. Dermed når vi viser dette trekartet, får vi det sorterte kartet på tastene.
Sorter HashMap etter verdier
For å sortere et HashMap i henhold til verdier, konverterer vi først hashmap til en LinkedList. Deretter bruker vi Collections.sort-metoden sammen med komparatoren for å sortere listen. Denne listen blir deretter konvertert tilbake til HashMap. Det sorterte HashMap skrives ut.
import java.util.*; public class Main { public static void main(String[] args) { //Create and initialize the HashMap HashMap colors_map = new HashMap(); colors_map.put(5, 'B'); colors_map.put(11, 'O'); colors_map.put(3, 'I'); colors_map.put(13, 'R'); colors_map.put(7, 'G'); colors_map.put(1, 'V'); colors_map.put(9, 'Y'); //print the HashMap using iterator after converting to set System.out.println('Unsorted HashMap:'); Set set = colors_map.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry map_entry = (Map.Entry)iterator.next(); System.out.print(map_entry.getKey() + ': '); System.out.println(map_entry.getValue()); } //call sortByValues method that returns a sorted Map. Map c_map = sortByValues(colors_map); System.out.println('HashMap sorted on values:'); //print the sorted HashMap Set set2 = c_map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry map_entry2 = (Map.Entry)iterator2.next(); System.out.print(map_entry2.getKey() + ': '); System.out.println(map_entry2.getValue()); } } private static HashMap sortByValues(HashMap hash_map) { //create a LinkedList from HashMap List list = new LinkedList(hash_map.entrySet()); // use Collections.sort method with Comparator to sort the list Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()) .compareTo(((Map.Entry) (o2)).getValue()); } }); //create a HashMap from linkedlist which preserves the order HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } return sortedHashMap; } }
Produksjon:
Usortert HashMap:
1: V
3: Jeg
5: B
7: G
9: og
11: O
13: R
HashMap sortert på verdier:
5: B
7: G
3: Jeg
11: O
13: R
1: V
9: og
Samtidig HashMap i Java
I vanlig HashMap vil vi ikke kunne endre elementene under kjøretid eller mens iterasjon utføres.
Implementeringen av et samtidig kart er vist nedenfor:
import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class Main { public static void main(String[] args) { //declare and initialize ConcurrentHashMap Map cCMap = new ConcurrentHashMap(); cCMap.put('1', '10'); cCMap.put('2', '10'); cCMap.put('3', '10'); cCMap.put('4', '10'); cCMap.put('5', '10'); cCMap.put('6', '10'); //print the initial ConcurrentHashMap System.out.println('Initial ConcurrentHashMap: '+cCMap); //define the iterator over the keys of ConcurrentHashMap Iterator it = cCMap.keySet().iterator(); //change one of the keys using iterator while(it.hasNext()){ String key = it.next(); if(key.equals('3')) cCMap.put(key+'c_map', 'c_map'); } //print the changed ConcurrentHashMap System.out.println('
ConcurrentHashMap after iterator: '+cCMap); } }
Produksjon:
Innledende ConcurrentHashMap: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10}
ConcurrentHashMap etter iterator: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10, 3c_map = c_map}
Merk at hvis vi hadde utført den samme operasjonen med HashMap, ville det ha kastet ConcurrentModificationException.
Java Map Vs HashMap
La oss tabellisere noen av forskjellene mellom Map og HashMap i Java.
Kart | HashMap |
---|---|
Det er et abstrakt grensesnitt. | Er en implementering av Map-grensesnitt. |
Grensesnittet må implementeres av andre klasser for at funksjonaliteten skal være tilgjengelig. | Er en konkret klasse og klasseobjekter kan opprettes for å få funksjonaliteten. |
Implementering av kartgrensesnitt som TreeMap tillater ikke nullverdier. | Tillater nullverdier og nøkler. |
TreeMap tillater ikke dupliserte verdier. | Det kan ha dupliserte verdier. |
En naturlig ordning av gjenstander opprettholdes. | Ingen inngangsrekkefølge opprettholdes i HashMap. |
ofte stilte spørsmål
Q # 1) Hvorfor brukes HashMap i Java?
Svar: HashMap, som er samlingen av nøkkelverdipar, hjelper til med å søke i dataene basert på nøkkelen alene. Også når det bruker hashingteknikker, gir det en effektiv oppslag av data.
Q # 2)Hvordan lager du et hash-kart?
hvordan få sikkerhetsnøkkel for wifi
Svar: En HashMap kan opprettes ved å sette i gang 'HashMap' -klassen i java.util-pakken. En hashMap med nøkler av typen heltall og verdiene for typestrengen kan opprettes som følger:
HashMap myMap= new HashMap();
Q # 3)Er HashMap bestilt i Java?
Svar: Nei, HashMap er ikke bestilt i Java. Den brukes ikke i Java til det formålet, men brukes til å lagre elementer i nøkkelverdipar.
Q # 4)Er HashMap trådsikker?
Svar: NEI, hashMap er ikke trådsikkert i Java.
Q # 5)Hva er raskere HashMap eller ConcurrentHashMap?
Svar: HashMap er raskere enn ConcurrentHashMap. Årsaken er at HashMap vanligvis bare bruker en tråd, og dermed er ytelsen god. Samtidig HashMap er imidlertid, som navnet antyder, samtidig og kan fungere samtidig på flere tråder.
Konklusjon
I denne opplæringen forsto vi arbeidet med HashMap sammen med en annen variant av HashMap kalt ConcurrentHashMap. Vi har sett konstruktører, metoder og eksempler på HashMap. Vi diskuterte også ConcurrentHashMap sammen med eksemplet.
I våre kommende opplæringsprogrammer vil vi lære mer om Java-samlinger.
=> Sjekk her for å se AZ av Java-opplæringsveiledninger her.
Anbefalt lesing
- LinkedHashMap In Java - LinkedHashMap Eksempel og implementering
- JAVA-opplæring for nybegynnere: 100+ praktiske Java-videoveiledninger
- TreeMap In Java - Veiledning med Java TreeMap-eksempler
- Hva er Java Vector | Java Vector Class Tutorial med eksempler
- Java String inneholder () Metodeopplæring med eksempler
- Hvordan sortere en matrise i Java - Veiledning med eksempler
- Jagged Array In Java - Opplæring med eksempler
- Java-skannerklasseopplæring med eksempler