what is hashmap java
Deze Java HashMap-zelfstudie legt uit wat een HashMap in Java is en hoe deze te gebruiken. Het omvat het declareren, initialiseren, herhalen, implementeren en afdrukken van HashMap:
HashMap in Java is een verzameling gebaseerd op Map en bestaat uit sleutel / waarde-paren. Een HashMap wordt aangeduid met of. Een HashMap-element kan worden geopend met behulp van een sleutel, d.w.z. we moeten de sleutel kennen om toegang te krijgen tot het HashMap-element.
Een HashMap maakt gebruik van een techniek genaamd 'Hashing'. Bij hashing wordt een langere string omgezet in een kortere string door een algoritme of ‘hash-functie’ toe te passen. Een string wordt geconverteerd naar een kortere string omdat het helpt bij het sneller zoeken. Het wordt ook gebruikt voor efficiënte indexering.
Bezoek hier voor de exclusieve Java Training Tutorial Series.
Wat je leert:
- HashMap in Java
- Java-kaart versus HashMap
- Gevolgtrekking
HashMap in Java
Een HashMap is vergelijkbaar met HashTable met het verschil dat de HashMap niet is gesynchroniseerd en null-waarden voor sleutel en waarde toestaat.
Enkele van de belangrijke kenmerken van HashMap worden hieronder gegeven:
- HashMap is geïmplementeerd in Java in de klasse 'Hashmap' die deel uitmaakt van het pakket java.util.
- De klasse HashMap erft van de klasse 'AbstractMap' die de kaartinterface gedeeltelijk implementeert.
- HashMap implementeert ook ‘kloneerbare’ en ‘serialiseerbare’ interfaces.
- HashMap staat dubbele waarden toe, maar staat geen dubbele sleutels toe. HashMap staat ook meerdere null-waarden toe, maar een null-sleutel kan er maar één zijn.
- HashMap is niet gesynchroniseerd en garandeert ook niet de volgorde van de elementen.
- Java HashMap-klasse heeft een initiële capaciteit van 16 en de standaard (initiële) belastingsfactor is 0,75.
Hoe een HashMap in Java declareren?
Een HashMap in Java is een onderdeel van het pakket java.util. Als we HashMap in onze code moeten gebruiken, moeten we daarom eerst de implementatieklasse importeren met een van de volgende instructies:
OF
De algemene verklaring van de HashMap-klasse is:
Hier K => type sleutels aanwezig op de kaart
V => type waarden toegewezen aan de sleutels op de kaart
Maak een HashMap
Een HashMap in Java kan als volgt worden gemaakt:
De bovenstaande verklaring bevat eerst de klasse HashMap in Java. Vervolgens maken we in de volgende instructie een HashMap met de naam ‘cities_map’ met het sleuteltype als geheel getal en waarden als tekenreeks.
Zodra de HashMap is gemaakt, moeten we deze initialiseren met waarden.
Hoe de hash-kaart te initialiseren?
We kunnen de HashMap initialiseren met behulp van de put-methode door enkele waarden in de kaart te plaatsen.
Het onderstaande programma toont de initialisatie van HashMap in Java.
Uitgang:
Initiële kaart: {}
Na het toevoegen van elementen:
100 Netwerk
101 Groen
102 Blauw
Hoe werkt een HashMap intern?
We weten dat HashMap een verzameling sleutel / waarde-paren is en dat het gebruik maakt van een techniek genaamd ‘Hashing’. Intern is de HashMap een reeks knooppunten. HashMap maakt gebruik van array en LinkedList voor het opslaan van sleutel / waarde-paren.
Hieronder wordt een structuur gegeven van een knooppunt van HashMap dat programmatisch wordt weergegeven als een klasse.
Zoals blijkt uit de bovenstaande knooppuntweergave, heeft een knooppunt een structuur die lijkt op een knooppunt met een gekoppelde lijst. Een reeks van deze knooppunten wordt Bucket genoemd. Elke bucket heeft mogelijk niet dezelfde capaciteit en kan ook meer dan één knooppunt hebben.
De prestaties van HashMap worden beïnvloed door twee parameters:
(i) Initiële capaciteit: Capaciteit wordt gedefinieerd als het aantal emmers in de HashMap. Initiële capaciteit wordt gedefinieerd als de capaciteit van het HashMap-object wanneer het wordt gemaakt. De capaciteit van de HashMap wordt altijd vermenigvuldigd met 2.
(ii) LoadFactor: LoadFactor is de parameter die meet wanneer opnieuw hasjen - het vergroten van de capaciteit - zal worden uitgevoerd.
Houd er rekening mee dat als de capaciteit hoog is, de belastingsfactor klein zal zijn omdat er niet opnieuw hoeft te worden gereinigd. Evenzo, wanneer de capaciteit laag is, zal de belastingsfactor hoog zijn, omdat we regelmatig opnieuw moeten haspelen. Daarom moeten we zorgvuldig deze twee factoren kiezen om een efficiënte hashMap te ontwerpen.
Hoe een hashmap te herhalen?
De HashMap moet worden doorlopen om de sleutel / waarde-paren te manipuleren of af te drukken.
Er zijn twee manieren waarop we de HashMap kunnen doorlopen of herhalen.
- Gebruik voor lus
- Met behulp van de while-lus en de iterator.
Het onderstaande Java-programma toont de implementatie van beide methoden.
Eerst halen we de set met items uit HashMap met behulp van de entrySet-methode en vervolgens doorlopen we de set met for-lus. Vervolgens drukken we de sleutel / waarde-paren af met respectievelijk de methoden getKey () en getValue ().
Om de HashMap te doorlopen met een while-lus, stellen we eerst een iterator in voor de HashMap en openen we vervolgens de sleutel / waarde-paren met behulp van de iterator.
Uitgang:
HashMap gebruikt voor Loop:
SLEUTEL WAARDE
1 DL
3 LANG
20 PUN
7 GOA
10 MUM
HashMap met while Loop:
SLEUTEL WAARDE
1 DL
3 LANG
20 PUN
7 GOA
10 MUM
nep-gmail-accountgenerator en wachtwoord
Druk een hash-kaart af
Laten we nog een voorbeeld bekijken van het afdrukken van de hashMap met behulp van de foreach-lus die in het onderstaande programma wordt getoond.
Uitgang:
HashMap inhoud:
SLEUTEL WAARDE
Netwerk 1
Magenta 8
Oranje 5
HashMap-constructor / methoden in Java
De onderstaande tabellen tonen de constructors en methoden die door de klasse HashMap in Java worden geleverd.
Constructeurs
Constructor-prototype | Omschrijving | |
---|---|---|
zet alle | void putAll (Kaartkaart) | Voegt gespecificeerde ‘map’ -elementen in de HashMap in. |
Hash kaart () | Standaard constructor. | |
HashMap (Kaart m) | Maakt een nieuwe HashMap van het opgegeven kaartobject m. | |
HashMap (int capaciteit) | Maakt een nieuwe HashMap met de initiële capaciteit gegeven door het argument ‘capaciteit’. | |
HashMap (int capaciteit, float loadFactor) | Maakt een nieuwe HashMap met behulp van de waarden van capacity en loadFactor die door de constructor zijn verstrekt. |
Methoden
Methode | Methode Prototype | Omschrijving |
---|---|---|
Doorzichtig | leegte duidelijk () | Wist alle toewijzingen in de HashMap |
is leeg | boolean isEmpty () | Controleert of de HashMap leeg is. Retourneert true indien ja. |
kloon | Object kloon () | Retourneert een ondiepe kopie zonder de sleutels en waardetoewijzingen in de HashMap te klonen. |
entrySet | Invoer instellenSet () | Retourneert toewijzingen in de HashMap als een verzameling |
sleutelbos | Set keySet () | Retourneert een set sleutels in de HashMap. |
zetten | V put (Objectsleutel, Objectwaarde) | Voegt een sleutelwaarde-invoer in de HashMap in. |
putIfAbsent | V putIfAbsent (K-toets, V-waarde) | Voegt een gegeven sleutel / waarde-paar in de HashMap in als het nog niet aanwezig is. |
verwijderen | V remove (Objectsleutel) | Verwijder een item uit de HashMap voor de opgegeven sleutel. |
verwijderen | boolean remove (Objectsleutel, Objectwaarde) | Verwijdert het opgegeven sleutel / waarde-paar uit de HashMap. |
berekenen | V-berekening (K-toets, BiFunction-remappingFunction) | Berekent mapping met behulp van ‘remappingfunction’ voor de gegeven sleutel en zijn huidige waarde of null-waarde. |
Methode | Methode Prototype | Omschrijving |
computeIfAbsent | V computeIfAbsent (K-toets, functie mappingFunction) | Berekent de mapping met behulp van de ‘mappingFunction’ en voegt sleutel / waarde-paren in als deze nog niet aanwezig zijn of null is. |
computeIfPresent | V computeIfPresent (K-toets, BiFunction remappingFunction) | Berekent een nieuwe mapping met behulp van de ‘remappingFunction’ gegeven de sleutel als de sleutel al aanwezig is en niet nul is. |
bevatValue | boolean containsValue (waarde van het object) | Controleert of de opgegeven waarde bestaat in de HashMap en retourneert true indien ja. |
bevatKey | boolean containsKey (Object sleutel) | Controleert of de opgegeven sleutel aanwezig is in de HashMap en retourneert true indien ja. |
gelijk is | boolean is gelijk aan (Object o) | Vergelijkt een gegeven object met de HashMap. |
voor elk | void forEach (BiConsumer-actie) | Voert de gegeven ‘actie’ uit voor elk van de items in de HashMap. |
krijgen | V get (Objectsleutel) | Retourneert het object met de opgegeven sleutel met de bijbehorende waarde. |
getOrDefault | V getOrDefault (Objectsleutel, V defaultValue) | Retourneert de waarde waaraan de opgegeven sleutel is toegewezen. Indien niet toegewezen, wordt de standaardwaarde geretourneerd. |
is leeg | boolean isEmpty () | Controleert of de HashMap leeg is. |
Gaan | V samenvoegen (K-toets, V-waarde, BiFunction-remappingFunction) | Controleert of de opgegeven sleutel null is of niet is gekoppeld aan waarde en associeert deze vervolgens met een niet-nulwaarde met behulp van remappingFunction. |
vervangen | V vervangen (K-toets, V-waarde) | Vervangt de opgegeven waarde voor de opgegeven sleutel. |
vervangen | boolean replace (K-toets, V oldValue, V newValue) | Vervangt de oude waarde van de opgegeven sleutel door de nieuwe waarde |
vervang alles | void replaceAll (BiFunction-functie) | Voert de gegeven functie uit en vervangt alle waarden in de HashMap door het functieresultaat. |
waarden | Verzamelingswaarden () | Retourneert de verzameling waarden die aanwezig zijn in de HashMap. |
grootte | int maat () | Retourneert de grootte van het aantal vermeldingen in de HashMap. |
Hashmap-implementatie
Vervolgens zullen we de meeste van deze functies in een Java-programma implementeren om hun werking beter te begrijpen.
Het volgende Java-programma toont een implementatie van HashMap in Java. Merk op dat we de meeste methoden hebben gebruikt die we hierboven hebben besproken.
Uitgang:
HashMap inhoud:
SLEUTEL WAARDE
49 Lelie
2 Sevilla
3 Dillon
7 Lacy
12 Leeuw
Waarde bij index 2 is: Sevilla
Hashmap na verwijdering:
SLEUTEL WAARDE
49 Lelie
2 Sevilla
7 Lacy
12 Leeuw
Sorteer HashMap in Java
In Java bewaart HashMap de volgorde niet. Daarom moeten we de elementen in de HashMap sorteren. We kunnen de elementen in de HashMap sorteren op basis van sleutels of waarden. In deze sectie zullen we beide sorteerbenaderingen bespreken.
Sorteer HashMap op sleutels
Uitgang:
Ongesorteerde HashMap:
1: Netwerk
3: Groen
5: Blauw
7: Cyaan
23: Bruin
9: Magenta
11: Geel
HashMap gesorteerd op toetsen:
1: Netwerk
3: Groen
5: Blauw
7: Cyaan
9: Magenta
11: Geel
23: Bruin
In het bovenstaande programma zien we dat zodra de hashmap is gedefinieerd en gevuld met waarden, we een treemap van deze hashmap maken. Terwijl de hashmap wordt geconverteerd naar een boomkaart, worden de sleutels automatisch gesorteerd. Dus wanneer we deze boomkaart weergeven, krijgen we de gesorteerde kaart op de toetsen.
Sorteer HashMap op waarden
Om een HashMap op waarden te sorteren, converteren we eerst de hashmap naar een LinkedList. Vervolgens gebruiken we de Collections.sort-methode samen met de comparator om de lijst te sorteren. Deze lijst wordt vervolgens weer geconverteerd naar HashMap. De gesorteerde HashMap wordt vervolgens afgedrukt.
Uitgang:
Ongesorteerde HashMap:
1: V
3: ik
5: B.
7: G.
9: en
11: O
13: R
HashMap gesorteerd op waarden:
5: B.
7: G.
3: ik
11: O
13: R
1: V
9: en
Gelijktijdige HashMap in Java
In normale HashMap kunnen we de elementen niet wijzigen tijdens runtime of terwijl iteratie wordt uitgevoerd.
De implementatie van een concurrent map wordt hieronder getoond:
Uitgang:
Initial ConcurrentHashMap: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10}
ConcurrentHashMap na iterator: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10, 3c_map = c_map}
Merk op dat als we dezelfde bewerking hadden uitgevoerd met HashMap, het ConcurrentModificationException zou hebben gegenereerd.
Java-kaart versus HashMap
Laten we enkele verschillen tussen Map en HashMap in Java in een tabel zetten.
Kaart | Hash kaart |
---|---|
Het is een abstracte interface. | Is een implementatie van Map-interface. |
De interface moet door andere klassen worden geïmplementeerd om zijn functionaliteit beschikbaar te maken. | Is een concrete klasse en klasseobjecten kunnen worden gemaakt om de functionaliteit te krijgen. |
Kaartinterface-implementatie zoals TreeMap staat geen null-waarden toe. | Staat null-waarden en sleutels toe. |
TreeMap staat geen dubbele waarden toe. | Het kan dubbele waarden hebben. |
Er wordt een natuurlijke ordening van objecten gehandhaafd. | Er wordt geen invoervolgorde bijgehouden in HashMap. |
Veel Gestelde Vragen
V # 1) Waarom wordt HashMap gebruikt in Java?
Antwoord: HashMap, zijnde de verzameling sleutel-waardeparen, helpt bij het doorzoeken van de gegevens op basis van alleen de sleutel. Ook omdat het hashing-technieken gebruikt, biedt het een efficiënte opzoeking van gegevens.
Q # 2)Hoe maak je een hash-map?
Antwoord: Een HashMap kan worden gemaakt door de ‘HashMap’ -klasse van het pakket java.util te instantiëren. Een hashMap met sleutels van het type integer en waarden van het type string kan als volgt worden gemaakt:
Q # 3)Is HashMap besteld in Java?
Antwoord: Nee, de HashMap is niet geordend in Java. Het wordt voor dat doel niet in Java gebruikt, maar wordt gebruikt voor het opslaan van elementen in sleutel-waardeparen.
Q # 4)Is HashMap thread-safe?
Antwoord: NEE, de hashMap is niet thread-safe in Java.
Q # 5)Wat is een snellere HashMap of ConcurrentHashMap?
Antwoord: HashMap is sneller dan ConcurrentHashMap. De reden is dat HashMap meestal slechts op één thread werkt, dus de prestaties zijn goed. Gelijktijdige HashMap is echter, zoals de naam suggereert, gelijktijdig en kan tegelijkertijd op meerdere threads werken.
Gevolgtrekking
In deze tutorial hebben we de werking van HashMap begrepen, samen met een andere variant van HashMap genaamd ConcurrentHashMap. We hebben constructors, methoden en voorbeelden van HashMap gezien. We hebben ook ConcurrentHashMap besproken, samen met het voorbeeld ervan.
In onze aanstaande tutorials zullen we meer leren over Java Collections.
Kijk hier om AZ van Java-trainingshandleidingen hier te zien.
Aanbevolen literatuur
- LinkedHashMap in Java - LinkedHashMap-voorbeeld en implementatie
- JAVA-zelfstudie voor beginners: 100+ praktische Java-videotutorials
- TreeMap in Java - Tutorial met Java TreeMap-voorbeelden
- Wat is Java-vector | Java Vector Class-zelfstudie met voorbeelden
- Java String bevat () Method Tutorial met voorbeelden
- Hoe een array in Java te sorteren - Tutorial met voorbeelden
- Jagged Array in Java - Tutorial met voorbeelden
- Zelfstudie voor Java-scannerklassen met voorbeelden