what is hashmap java
Denna Java HashMap-handledning förklarar vad som är en HashMap i Java och hur man använder den. Det inkluderar hur man deklarerar, initierar, återger, implementerar och skriver ut HashMap:
HashMap i Java är en samling baserad på Map och består av nyckel-värdepar. En HashMap betecknas med eller. Ett HashMap-element kan nås med en nyckel, dvs. vi måste känna nyckeln för att komma åt HashMap-elementet.
En HashMap använder en teknik som kallas ”Hashing”. I hashing konverteras en längre sträng till en kortare sträng genom att använda någon algoritm eller 'hash-funktion'. En sträng konverteras till en kortare sträng eftersom det hjälper till att söka snabbare. Den används också för effektiv indexering.
=> Besök här för den exklusiva Java-utbildningsserien.
Vad du kommer att lära dig:
- HashMap i Java
- Java Map Vs HashMap
- Slutsats
HashMap i Java
En HashMap liknar HashTable med en skillnad att HashMap inte synkroniseras och tillåter nollvärden för nyckel och värde.
Några av de viktiga egenskaperna hos HashMap ges nedan:
- HashMap implementeras i Java i klassen “Hashmap” som ingår i paketet java.util.
- HashMap-klassen ärver från klassen “AbstractMap” som delvis implementerar Map-gränssnittet.
- HashMap implementerar också 'klonabla' och 'serialiserbara' gränssnitt.
- HashMap tillåter dubbla värden men tillåter inte dubbla nycklar. HashMap tillåter också flera nollvärden men en nollnyckel kan bara vara ett.
- HashMap är osynkroniserat och garanterar inte heller ordningen på elementen.
- Java HashMap-klassen har en initial kapacitet på 16 och standardbelastningsfaktorn (initial) är 0,75.
Hur man förklarar en HashMap i Java?
En HashMap i Java är en del av paketet java.util. Därför, om vi behöver använda HashMap i vår kod, måste vi först importera implementeringsklassen med hjälp av något av följande uttalanden:
import java.util.*;
ELLER
import java.util.HashMap;
Den allmänna förklaringen för HashMap-klassen är:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
Här är K => typ av tangenter som finns på kartan
V => typ av värden mappade till tangenterna på kartan
Skapa en HashMap
En HashMap i Java kan skapas enligt följande:
import java.util.HashMap; HashMap cities_map = new HashMap ();
Ovanstående uttalande inkluderar först HashMap-klassen i Java. Sedan i nästa uttalande skapar vi en HashMap med namnet 'towns_map' med nyckeltyp som heltal och värden som sträng.
När HashMap har skapats måste vi initiera det med värden.
Hur initierar jag Hash-kartan?
Vi kan initialisera HashMap med put-metoden genom att sätta några värden på kartan.
Programmet nedan visar 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()); } } }
Produktion:
Ursprunglig karta: {}
Efter att ha lagt till element:
100 Nätverk
101 Grön
102 Blå
Hur fungerar en HashMap internt?
Vi vet att HashMap är en samling nyckel-värde-par och använder en teknik som kallas 'Hashing'. Internt är HashMap en rad noder. HashMap använder array och LinkedList för att lagra nyckel-värdepar.
Nedan visas en struktur för en nod av HashMap som programmatiskt representeras som en klass.
Som framgår av nodrepresentationen ovan har en nod en struktur som liknar en länkad listnod. En matris av dessa noder kallas Bucket. Varje hink kanske inte har samma kapacitet och den kan ha mer än en nod också.
HashMaps prestanda påverkas av två parametrar:
(i) Initial kapacitet: Kapacitet definieras som antalet skopor i HashMap. Initial Capacity definieras som kapaciteten för HashMap-objektet när det skapas. HashMaps kapacitet multipliceras alltid med 2.
(ii) LoadFactor: LoadFactor är parametern som mäter när du tvättar igen - ökad kapacitet kommer att göras.
Observera att om kapaciteten är hög, kommer belastningsfaktorn att vara liten eftersom ingen eftertvätt krävs. På samma sätt, när kapaciteten är låg, kommer belastningsfaktorn att vara hög eftersom vi måste tvätta om ofta. Därför bör vi vara försiktiga med att noggrant välja dessa två faktorer för att utforma en effektiv hashMap.
Hur kan jag ändra en HashMap?
HashMap måste passeras för att manipulera eller skriva ut nyckel-värde-paren.
Det finns två sätt på vilka vi kan korsa eller itera genom HashMap.
- Använda för loop
- Använda while-slingan och iteratorn.
Java-programmet nedan visar implementeringen av båda dessa metoder.
Först hämtar vi uppsättningen poster från HashMap med hjälp av metoden entrySet och sedan korsar vi uppsättningen med hjälp av för loop. Sedan skriver vi ut nyckel-värde-paren med metoderna getKey () respektive getValue ().
För att korsa HashMap med en while-loop, ställer vi först in en iterator för HashMap och får sedan åtkomst till nyckel-värdeparen med iteratorn.
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()); } } }
Produktion:
HashMap använder för Loop:
NYCKELVÄRDE
1 DL
3 LÅNG
20 PUN
7 GOA
10 MUM
HashMap använder medan Loop:
NYCKELVÄRDE
1 DL
3 LÅNG
20 PUN
7 GOA
10 MUM
Skriv ut en Hash-karta
Låt oss se ett annat exempel på att skriva ut hashMap med hjälp av foreach-slingan som visas i programmet nedan.
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)); } } }
Produktion:
HashMap-innehåll:
NYCKELVÄRDE
Nätverk 1
Magenta 8
Orange 5
HashMap-konstruktör / metoder i Java
Nedanstående tabeller visar de konstruktörer och metoder som tillhandahålls av HashMap-klassen i Java.
Konstruktörer
Konstruktör prototyp | Beskrivning | |
---|---|---|
sätt alla | void putAll (Map map) | Infogar angivna ”kartelement” i HashMap. |
HashMap () | Standardkonstruktör. | |
HashMap (karta m) | Skapar en ny HashMap från det angivna kartobjektet m. | |
HashMap (int-kapacitet) | Skapar en ny HashMap med den initiala kapaciteten som ges av argumentet 'kapacitet'. | |
HashMap (int-kapacitet, float loadFactor) | Skapar en ny HashMap med de värden på kapacitet och loadFactor som tillhandahålls av konstruktören. |
Metoder
Metod | Metodprototyp | Beskrivning |
---|---|---|
klar | ogiltig rensa () | Rensar alla mappningar i HashMap |
är tom | boolean isEmpty () | Kontrollerar om HashMap är tom. Returnerar sant om ja. |
klona | Objektklon () | Returnerar en grunt kopia utan att klona nycklarna och värderingsmappningarna i HashMap. |
entrySet | Ställ in post Set () | Returnerar mappningar i HashMap som en samling |
tangentuppsättning | Set keySet () | Returnerar en uppsättning nycklar i HashMap. |
sätta | V put (Objektnyckel, Objektvärde) | Infogar en nyckel-värdepost i HashMap. |
putIfAbsent | V putIfAbsent (K-tangent, V-värde) | Infogar ett givet nyckel-värdepar i HashMap om det inte redan finns. |
ta bort | V ta bort (Objektnyckel) | Ta bort en post från HashMap för den angivna nyckeln. |
ta bort | boolean remove (Objektnyckel, Objektvärde) | Tar bort det angivna nyckel-värdeparet från HashMap. |
beräkna | V-beräkning (K-tangent, BiFunction remappingFunction) | Beräknar kartläggning med hjälp av ”remapping-funktion” för den angivna nyckeln och dess aktuella värde eller nullvärde. |
Metod | Metodprototyp | Beskrivning |
beräknaIfAbsent | V computeIfAbsent (K-tangent, Function mappingFunction) | Beräknar kartläggningen med hjälp av 'mappingFunction' och infogar nyckel-värdepar om den inte redan finns eller är null. |
computeIfPresent | V computeIfPresent (K-tangent, BiFunction remappingFunction) | Beräknar en ny mappning med hjälp av 'remappingFunction' med tanke på nyckeln om nyckeln redan finns och inte är null. |
containsValue | boolean containsValue (Objektvärde) | Kontrollerar om det angivna värdet finns i HashMap och returnerar true om ja. |
innehållerKey | boolean containsKey (Objektnyckel) | Kontrollerar om den angivna nyckeln finns i HashMap och returnerar true om ja. |
är lika med | booleska lika (Objekt o) | Jämför ett visst objekt med HashMap. |
för varje | ogiltig för varje (BiConsumer-åtgärd) | Utför given åtgärd för var och en av posterna i HashMap. |
skaffa sig | V get (Objektnyckel) | Returnerar objektet som innehåller den givna nyckeln med tillhörande värde. |
getOrDefault | V getOrDefault (Objektnyckel, V defaultValue) | Returnerar det värde som den angivna nyckeln mappas till. Om det inte är kartlagt returneras standardvärdet. |
är tom | boolean isEmpty () | Kontrollerar om HashMap är tom. |
gå | V-sammanslagning (K-tangent, V-värde, BiFunction-remappingFunction) | Kontrollerar om den angivna nyckeln är noll eller inte associerad med värde och associerar den sedan med ett icke-nollvärde med remappingFunction. |
byta ut | V ersätt (K-tangent, V-värde) | Ersätter det angivna värdet för den angivna nyckeln. |
byta ut | boolean ersättare (K-tangent, V oldValue, V newValue) | Ersätter det gamla värdet för den angivna nyckeln med det nya värdet |
Ersätt alla | void replaceAll (BiFunction-funktion) | Kör den givna funktionen och ersätter alla värden i HashMap med funktionsresultatet. |
värden | Samlingsvärden () | Returnerar samlingen av värden som finns i HashMap. |
storlek | int storlek () | Returnerar storleken på antalet poster i HashMap. |
Hashmap-implementering
Därefter implementerar vi de flesta av dessa funktioner i ett Java-program för att förstå hur de fungerar bättre.
Följande Java-program visar en implementering av HashMap i Java. Observera att vi har använt de flesta av de metoder som vi diskuterade ovan.
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() ); } } }
Produktion:
HashMap-innehåll:
NYCKELVÄRDE
49 Lilja
2 Sevilla
3 Dillon
7 Lacy
12 Leo
Värde vid index 2 är: Sevilla
Hashmap efter borttagning:
NYCKELVÄRDE
49 Lilja
2 Sevilla
7 Lacy
12 Leo
Sortera HashMap i Java
I Java bevarar inte HashMap ordern. Därför måste vi sortera elementen i HashMap. Vi kan sortera elementen i HashMap antingen baserat på nycklar eller värden. I detta avsnitt kommer vi att diskutera båda sorteringsmetoderna.
Sortera HashMap efter nycklar
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()); } } }
Produktion:
Osorterad HashMap:
1: Nätverk
3: Grön
5: Blå
7: Cyan
23: Brun
9: Magenta
11: gul
HashMap sorterat efter knappar:
1: Nätverk
3: Grön
5: Blå
7: Cyan
9: Magenta
11: gul
23: Brun
I programmet ovan ser vi att när hashmap har definierats och fyllts med värden skapar vi en treemap från denna hashmap. När hashmap konverteras till en treemap, sorteras dess nycklar automatiskt. När vi visar den här trekartan får vi alltså den sorterade kartan på tangenterna.
Sortera HashMap efter värden
För att sortera en HashMap efter värden konverterar vi först hashmap till en LinkedList. Sedan använder vi metoden Collections.sort tillsammans med komparatorn för att sortera listan. Denna lista konverteras sedan tillbaka till HashMap. Den sorterade HashMap skrivs sedan 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; } }
Produktion:
Osorterad HashMap:
1: V
3: Jag
5: B
7: G
9: och
11: O
13: R
HashMap sorterat på värden:
5: B
7: G
3: Jag
11: O
13: R
1: V
9: och
Samtidig HashMap i Java
I normal HashMap kommer vi inte att kunna ändra elementen under körning eller medan iteration utförs.
Implementeringen av en samtidig karta visas nedan:
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); } }
Produktion:
Initial ConcurrentHashMap: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10}
ConcurrentHashMap efter iterator: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10, 3c_map = c_map}
Observera att om vi hade utfört samma operation med HashMap, skulle det ha kastat ConcurrentModificationException.
Java Map Vs HashMap
Låt oss tabellisera några av skillnaderna mellan Map och HashMap i Java.
Karta | HashMap |
---|---|
Det är ett abstrakt gränssnitt. | Är en implementering av Map-gränssnittet. |
Gränssnittet måste implementeras av andra klasser för att dess funktionalitet ska vara tillgänglig. | Är en konkret klass och klassobjekt kan skapas för att få funktionaliteten. |
Implementering av kartgränssnitt som TreeMap tillåter inte nollvärden. | Tillåter nollvärden och nycklar. |
TreeMap tillåter inte dubbla värden. | Det kan ha dubbla värden. |
En naturlig ordning av föremål bibehålls. | Ingen inmatningsordning bibehålls i HashMap. |
Vanliga frågor
F # 1) Varför används HashMap i Java?
Svar: HashMap är samlingen av nyckel-värdepar hjälper till att söka i data baserat på enbart nyckeln. Eftersom det använder hashingtekniker ger det en effektiv sökning av data.
F # 2)Hur skapar du en hash-karta?
Svar: En HashMap kan skapas genom att starta klassen 'HashMap' i paketet java.util. En hashMap med nycklar av typen heltal och värden för typsträngen kan skapas enligt följande:
HashMap myMap= new HashMap();
F # 3)Beställs HashMap i Java?
Svar: Nej, HashMap är inte beställt i Java. Den används inte i Java för det ändamålet men används för att lagra element i nyckel-värdepar.
F # 4)Är HashMap trådsäker?
Svar: NEJ, hashMap är inte trådsäker i Java.
F # 5)Vilket är snabbare HashMap eller ConcurrentHashMap?
vad är en json-fil hur man öppnar
Svar: HashMap är snabbare än ConcurrentHashMap. Anledningen är att HashMap vanligtvis bara fungerar på en tråd, så dess prestanda är bra. Concurrent HashMap är dock, som namnet antyder, samtidigt och kan fungera samtidigt på flera trådar.
Slutsats
I denna handledning förstod vi hur HashMap fungerar tillsammans med en annan variant av HashMap som heter ConcurrentHashMap. Vi har sett konstruktörer, metoder och exempel på HashMap. Vi diskuterade också ConcurrentHashMap tillsammans med dess exempel.
I våra kommande handledning lär vi oss mer om Java-samlingar.
=> Kolla här för att se A-Z av Java-utbildningar här.
Rekommenderad läsning
- LinkedHashMap I Java - LinkedHashMap Exempel och implementering
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- TreeMap In Java - Handledning med Java TreeMap-exempel
- Vad är Java Vector | Java Vector Class Tutorial med exempel
- Java String innehåller () Metodhandledning med exempel
- Hur man sorterar en matris i Java - Handledning med exempel
- Jagged Array In Java - Handledning med exempel
- Java Scanner-klasshandledning med exempel