java map interface tutorial with implementation examples
Deze uitgebreide zelfstudie over Java-kaarten behandelt het maken, initialiseren en herhalen van kaarten. U leert ook over kaartmethoden en implementatievoorbeelden:
U maakt kennis met de basisprincipes van de kaartinterface, methoden die worden ondersteund door de kaartinterface en andere specifieke termen met betrekking tot de kaartinterface.
Kaartenverzameling in Java is een verzameling die een sleutel naar een waarde toewijst. Het is een verzameling bestaande uit sleutels en waarden. Elk item op de kaart bestaat uit een sleutel met de bijbehorende waarde. De sleutels zijn uniek in kaarten. Kaarten kunnen doorgaans worden gebruikt wanneer we een collectie moeten wijzigen op basis van een sleutelwaarde.
Bekijk hier ALLE Java-tutorials.
Wat je leert:
- Kaarten in Java
- Kaartmethoden
- Implementatie van Java-kaarten
- Gevolgtrekking
Kaarten in Java
De kaart in Java maakt deel uit van de interface java.util.map. De kaartinterface maakt geen deel uit van de collectieinterface en dat is de reden waarom kaarten verschillen van de andere collecties.
De algemene hiërarchie van de kaartinterface wordt hieronder weergegeven.
Zoals hierboven getoond, zijn er twee interfaces om kaart te implementeren, d.w.z. kaartinterface en gesorteerde kaartinterface. Er zijn drie klassen, namelijk HashMap, TreeMap en LinkedHashMap.
Deze kaarttypen worden hieronder beschreven:
Klasse | Omschrijving | |
---|---|---|
verwijderen | V remove (Objectsleutel) | Verwijder een kaartvermelding voor de gegeven sleutel |
LinkedHashMap | Strekt zich uit van de HashMap-klasse. Deze kaart handhaaft de invoegvolgorde | |
Hash kaart | Implementeer een kaartinterface. Geen enkele bestelling wordt onderhouden door HashMap. | |
TreeMap | Implementeert zowel kaart- als gesorteerde kaartinterface. TreeMap houdt een oplopende volgorde aan. |
Punten om te onthouden over kaarten.
- In kaarten kan elke sleutel worden toegewezen aan maximaal één waarde. Er kunnen ook geen dubbele sleutels in kaarten zijn.
- Kaartimplementaties zoals HashMap en LinkedHashMap staan null-sleutel- en null-waarden toe. TreeMap staat het echter niet toe.
- Een kaart kan niet worden doorkruist zoals hij is. Daarom moet het voor het doorlopen worden geconverteerd naar het instellen met de methode keyset () of entrySet ().
Maak een kaart in Java
Om een kaart in Java te maken, moeten we eerst de interface in ons programma opnemen. We kunnen een van de volgende uitspraken in het programma gebruiken om de kaartfunctionaliteit te importeren.
We moeten een concrete implementatie van de kaart maken, aangezien het een interface is.
De volgende instructies maken een kaart in Java.
De bovenstaande uitspraken zullen kaarten maken met standaardspecificaties.
We kunnen ook generieke kaarten maken met de typen voor zowel de sleutel als de waarde.
De bovenstaande definitie heeft sleutels van het type string en objecten als waarden.
Initialiseer een kaart in Java
Het kan op de volgende manieren worden geïnitialiseerd:
# 1) Collecties gebruiken
Java Collections-klasse heeft fabrieksmethoden die kunnen worden gebruikt om verzamelingen, inclusief kaarten, te initialiseren.
Enkele methoden die worden gebruikt om de kaart te initialiseren, zijn als volgt:
(1) Collections.EmptyMap ()
De Collections.EmptyMap () retourneert een serialiseerbare en onveranderlijke kaart die leeg is. Bijvoorbeeld, de volgende regel code,
Dit zal een lege kaart creëren. De bovenstaande methode kan een 'ongecontroleerde toewijzingswaarschuwing' genereren en daarom kunnen we ook het type-veilige formulier als volgt gebruiken.
(2) Collections.unModifiableMap ()
De methode unModifiableMap () neemt een andere kaart als argument en creëert een niet-wijzigbare weergave van de originele kaart.
(3) Collections.singletonMap ()
Collections klasse biedt ook een fabrieksmethode ‘singletonMap ()’ die een onveranderlijke singleton-kaart maakt met slechts één invoer.
# 2) Java 8 gebruiken
We kunnen een gegevensstroom verkrijgen van Java 8 stream API-methoden en kaarten maken met behulp van Collectors.
Enkele van de methoden om kaarten te maken zijn:
(1) Collectors.toMap ()
We verzamelen een stream en gebruiken vervolgens de methode Collectors.toMap () om een kaart te maken.
De bovenstaande verklaring maakt een kaart van de Java 8-stream.
(2) Collectors.collectingAndThen ()
Hierin passen we de methode toMap () aan waarmee de verzamelaar een onveranderlijke kaart kan produceren met behulp van de methode collectionAndThen ().
# 3) Met behulp van de put-methode van de kaartinterface
De methode put () van de kaartinterface kan worden gebruikt om beginwaarden aan kaarten toe te wijzen.
# 4) Initialisatie met dubbele accolade gebruiken
De techniek 'initialisatie met dubbele beugel' creëert een innerlijke klasse. Deze klasse is anoniem en bevat een instantie-initialisatieprogramma. Dit is geen voorkeurstechniek en moet worden vermeden, aangezien dit kan leiden tot geheugenlekken of serialiseringsproblemen.
Het onderstaande programma toont de verschillende methoden voor het initialiseren van een hierboven besproken kaart.
Uitgang:
Kaart-kaartwaarden: {}
singleton_map Kaartwaarden: {10 = TEN}
map_cities-waarden: {CH = Chennai, DL = New Delhi, MH = Mumbai}
capitals_Map waarden: {MAH = Mumbai, GOA = Panaji, KAR = Bangaluru}
Kaartwaarden: {VS = Washington, GER = Berlijn, VK = Londen, IND = Delhi}
Herhaal de kaart in Java en druk de kaart af
We kunnen de kaart op dezelfde manier doorkruisen als de andere collecties. Naast het doorlopen van kaartitems, kunnen we ook alleen door de sleutels of alleen de waarden op de kaart bladeren. Merk op dat om een kaart te doorlopen, deze eerst moet worden geconverteerd om in te stellen.
De volgende methoden worden gebruikt om door de kaartitems te lopen.
Met behulp van Entry Iterator
Bij deze methode verkrijgen we een entry-iterator uit een entry-set. Vervolgens gebruiken we de methoden getKey en getValue om het sleutel-waardepaar voor elk kaartitem op te halen.
Het volgende programma toont het gebruik van een invoer-iterator.
Uitgang:
De kaartvermeldingen zijn:
SLEUTEL WAARDE
CH Chennai
DL New Delhi
MH Mumbai
In het bovenstaande programma verkrijgen we een invoer-iterator van de kaart met behulp van de entrySet-methode. Vervolgens doorkruisen we de kaart met behulp van de hasNext () -methode van invoer-iterator en drukken we het sleutel-waardepaar af.
Een invoer gebruiken voor elke lus
Hier doorlopen we de entrySet met for-each-lus en de implementatie wordt hieronder weergegeven.
Uitgang:
De kaartvermeldingen zijn:
SLEUTEL WAARDE
CH Chennai
DL New Delhi
MH Mumbai
Kaartmethoden
De kaartinterface in Java ondersteunt verschillende bewerkingen die vergelijkbaar zijn met die worden ondersteund door andere collecties. In dit gedeelte bespreken we de verschillende methoden die door Map API in Java worden geboden. Aangezien het bereik van deze tutorial beperkt is tot het introduceren van een kaartinterface in het algemeen, zullen we deze methoden niet beschrijven.
We zullen deze methoden in detail bespreken terwijl we kaartinterfaceklassen bespreken.
De volgende tabel bevat alle methoden die door de kaart-API worden geboden.
Methode naam | Methode Prototype | Omschrijving |
---|---|---|
krijgen | V get (Objectsleutel) | Retourneert het object of de waarde voor de opgegeven sleutel |
zetten | V put (Objectsleutel, Objectwaarde) | Voer een sleutelwaarde-invoer in de kaart in |
zet alle | void putAll (Kaartkaart) | Voeg bepaalde kaartvermeldingen in de kaart in. Met andere woorden: kopieert of kloont een kaart. |
sleutelbos | Set keySet () | Geeft de ingestelde weergave van de kaart terug. |
entrySet | Set | Returns bepalen de weergave voor een bepaalde kaart |
waarden | Verzamelingswaarden () | Retourneert een verzamelingsweergave van de waarden op de kaart. |
grootte | int maat () | Retourneert het aantal vermeldingen op de kaart |
Doorzichtig | leegte duidelijk () | Wist de kaart |
is leeg | boolean isEmpty () | Controleert of de kaart leeg is en retourneert true indien ja. |
bevatValue | boolean containsValue (waarde van het object) | Geeft true terug als de kaart de waarde bevat die gelijk is aan de opgegeven waarde |
bevatKey | boolean containsKey (Object sleutel) | Geeft true terug als een bepaalde sleutel in de kaart voorkomt |
gelijk is | boolean is gelijk aan (Object o) | Vergelijkt gespecificeerd object o met de kaart |
hashCode | int hashCode () | geeft de hash-code voor de kaart terug |
voor elk | void forEach (BiConsumer-actie) | Voert een bepaalde actie uit voor elk item op de kaart |
getOrDefault | V getOrDefault (Objectsleutel, V defaultValue) | Retourneert de opgegeven waarde voor de opgegeven sleutel of de standaardwaarde als de sleutel niet aanwezig is |
verwijderen | boolean remove (Objectsleutel, Objectwaarde) | Verwijdert gespecificeerde sleutels en waarden |
vervangen | V vervangen (K-toets, V-waarde) | Vervangt de opgegeven sleutel door de opgegeven waarde |
vervangen | boolean replace (K-toets, V oldValue, V newValue) | Vervangt de oude waarde door een nieuwe waarde voor een bepaalde sleutel |
vervang alles | void replaceAll (BiFunction-functie) | Roept de gegeven functie op om alle kaartitems te vervangen |
putIfAbsent | V putIfAbsent (K-toets, V-waarde) | Voegt de opgegeven sleutel in, waarde alleen als deze nog niet aanwezig is |
berekenen | V-berekening (K-toets, BiFunction-remappingFunction) | Berekent de toewijzing voor de opgegeven sleutel en waarde, gegeven de toewijzingsfunctie. |
computeIfAbsent | V computeIfAbsent (K-toets, functie mappingFunction) | Bereken de waarde voor de gegeven sleutel met behulp van de mapping-functie als deze nog niet aanwezig is. |
computeIfPresent | V computeIfPresent (K-toets, BiFunction remappingFunction) | Berekent nieuwe mapping voor de gegeven sleutel met de gegeven remapping-functie als de sleutelwaarde al aanwezig is |
Gaan | V samenvoegen (K-toets, V-waarde, BiFunction-remappingFunction) | Associeert een bepaalde sleutel met de waarde als deze nog niet is gekoppeld of is gekoppeld aan de null-waarde. |
Alle bovenstaande methoden worden ondersteund door de kaartinterface. Merk op dat de methoden die gearceerd worden weergegeven, de nieuwe methoden zijn die in Java 8 zijn opgenomen.
Implementatie van Java-kaarten
Het volgende programma implementeert een kaartvoorbeeld in Java. Hier gebruiken we de meeste van de hierboven besproken methoden.
Het voorbeeld demonstreert verschillende get-bewerkingen, put- en set-bewerkingen.
Uitgang:
Sleutel = CHN, Waarde: China
Sleutel = XX, waarde: null
null keyExists: true, null valueExists = true
entry set voor de country_map: [null = Z, XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Korea]
Grootte van country_map: 6
data_map toegewezen aan country_map: {null = Z, XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Kore
naar}
null-sleutelwaarde voor data_map: Z
data_map na verwijderen van null-sleutel = {XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Korea}
data map-sleutels: [null, XX, CHN, SL, IND, KOR]
gegevenskaartwaarden: [Z, null, China, Srilanka, India, Korea]
datamap na wissen, is leeg: waar
Een kaart sorteren in Java
Omdat een kaart uit sleutel / waarde-paren bestaat, kunnen we de kaart sorteren op sleutels of waarden.
In deze sectie zullen we een kaart sorteren op zowel sleutels als waarden.
Sorteer op sleutel
Om een kaart op sleutels te sorteren, kunnen we een boomkaart gebruiken. De boomkaart sorteert de sleutels automatisch. Het onderstaande Java-programma zet een kaart om in een boomkaart en toont de gesorteerde sleutels.
Uitgang:
Oorspronkelijke ongesorteerde kaart:
Een Amerika
C China
D Denemarken
X Hongkong
Ik India
Kaart gesorteerd op sleutel:
Een Amerika
C China
D Denemarken
Ik India
X Hongkong
Het bovenstaande programma maakt een kaart die bestaat uit een enkele alfabetcode als sleutels en landnamen als waarden. Eerst tonen we de originele kaart die niet gesorteerd is. Vervolgens zetten we de kaart om in een treemap die de sleutels automatisch sorteert. Ten slotte geven we de gesorteerde boomkaart op toetsen weer.
Sorteer op waarde
Om een kaart te sorteren op basis van waarden, zetten we de kaart eerst om in een lijst. Vervolgens sorteren we deze lijst met de methode Collections.sort () die een comparator gebruikt om de waarden te vergelijken en ze in een specifieke volgorde te rangschikken.
Zodra de lijst is gesorteerd, worden de gekoppelde lijstitems opnieuw naar de kaart gekopieerd, wat ons de gesorteerde kaart geeft.
Het volgende Java-programma demonstreert het sorteren van een kaart op basis van waarde. Het programma gebruikt LinkedHashMap die wordt doorgegeven aan de sorteerfunctie. In de sorteerfunctie wordt het geconverteerd naar een gekoppelde lijst en gesorteerd. Na het sorteren wordt het terug geconverteerd naar LinkedHashMap.
hoe u een gekoppelde lijst in java initialiseert
Uitgang:
Originele ongesorteerde kaart:
{NEP = Kathmandu, IND = New Delhi, VS = Washington, VK = Londen, AUS = Canberra
Kaart gesorteerd op waarde:
Sleutel waarde
VAN Canberra
NEP Kathmandu
UK Londen
IND New Delhi
Verenigde Staten Washington
Gelijktijdige kaart in Java
Een concurrentMap is een interface die erft van de interface java.util.map. De concurrentMap-interface werd voor het eerst geïntroduceerd in JDK 1.5 en biedt een kaart die gelijktijdige toegang afhandelt.
De concurrentMap-interface maakt deel uit van het pakket java.util.concurrent.
Het volgende Java-programma demonstreert de concurrentMap in Java.
Uitgang:
Initiële gelijktijdige kaart: {100 = rood, 101 = groen, 102 = blauw}
Na het toevoegen van een afwezige sleutel 103: {100 = rood, 101 = groen, 102 = blauw, 103 = paars}
Gelijktijdige kaart na verwijdering van 101: {100 = rood, 102 = blauw, 103 = paars}
Voeg afwezige sleutel 101 toe: {100 = rood, 101 = bruin, 102 = blauw, 103 = paars}
Vervang waarde op sleutel 101: {100 = rood, 101 = groen, 102 = blauw, 103 = paars}
Gesynchroniseerde kaart in Java
Een gesynchroniseerde kaart is een kaart die thread-safe is en wordt ondersteund door een bepaalde kaart. In Java wordt de gesynchroniseerde kaart verkregen door de methode synchronizedMap () van de klasse java.util.Collections te gebruiken. Deze methode retourneert een gesynchroniseerde kaart voor een bepaalde kaart.
Deze geretourneerde gesynchroniseerde kaart wordt gebruikt om toegang te krijgen tot de achtergrondkaart om seriële toegang te verkrijgen.
De algemene verklaring van de methode synchronizedMap () is:
waarbij m => de ondersteunde kaart is.
Zoals eerder vermeld, retourneert deze methode de gesynchroniseerde weergave van kaart m.
Het onderstaande Java-programma is een voorbeeld van een gesynchroniseerde kaart.
Uitgang:
Oorspronkelijke kaart (ondersteund): {1 = 10, 2 = 20, 3 = 30, 4 = 40, 5 = 50}
Gesynchroniseerde kaart na verwijdering (3, 30): {1 = 10, 2 = 20, 4 = 40, 5 = 50}
Statische kaart in Java
Een statische kaart in Java is een kaart die statisch wordt verklaard, net als een statische variabele. Door een map statisch te declareren, wordt het een toegankelijke klassevariabele zonder het object te gebruiken.
Er zijn twee manieren om een statische kaart in Java te maken en te initialiseren.
# 1) Een statische variabele gebruiken
Hier maken we een statische kaartvariabele en instantiëren deze samen met de declaratie.
Deze benadering wordt gedemonstreerd in het volgende Java-programma.
Uitgang:
Statische kaart met behulp van statische kaartvariabele:
{1 = India, 2 = Portugal, 3 = Duitsland}
# 2) Statisch blok gebruiken
Hierin maken we een statische kaartvariabele. Vervolgens maken we een statisch blok en binnen dit statische blok initialiseren we de map-variabele.
Het onderstaande programma laat dit zien.
Uitgang:
Statische kaart met statisch blok:
{1 = rood, 2 = groen, 3 = blauw}
Conversie van de lijst naar kaart
In dit gedeelte bespreken we de methoden om de lijst naar een kaart te converteren.
De twee methoden zijn:
Traditionele methode
Bij de traditionele methode wordt elk lijstelement naar de kaart gekopieerd met behulp van een for-each-lus.
Deze implementatie wordt hieronder weergegeven:
Uitgang:
De gegeven lijst: [Rood, Groen, Blauw, Bruin, Wit]
Kaart gegenereerd op basis van lijst: {1 = rood, 2 = groen, 3 = blauw, 4 = bruin, 5 = wit}
Lijst om toe te wijzen in Java 8
We kunnen ook de Java 8-methode Collectors.mapOf () gebruiken die de gegeven lijst omzet in een kaart.
Het onderstaande programma laat dit zien.
Uitgang:
Kaart verkregen uit lijst: {1 = Abacus, 2 = Wiskunde, 3 = Natuurkunde, Scheikunde}
In dit programma hebben we een klasse Onderwerp dat fungeert als een lijstklasse. De klasse Subject heeft twee velden, namelijk sub_id en sub_name. We hebben methoden om de veldwaarden uit de klasse te lezen. In de hoofdfunctie maken we objecten van deze klasse en stellen we een lijst samen.
Deze lijst wordt vervolgens geconverteerd naar de kaart met behulp van de Collectors.MapOf-methode die de elementen een voor een opneemt. Het heeft ook de sub_Id nodig als de sleutel tot de kaart. Ten slotte wordt de kaart met sub_Id als sleutel en Sub_Name als waarde gegenereerd.
Converteer kaart naar string in Java
Een kaartverzameling kan op twee manieren naar een string worden geconverteerd:
StringBuilder gebruiken
Hier maken we een StringBuilder-object en kopiëren vervolgens de sleutelwaardeparen van de kaart naar het StringBuilder-object. Vervolgens zetten we het StringBuilder-object om in een string.
Het onderstaande programma toont de Java-code om de kaart naar de string te converteren.
Uitgang:
De gegeven kaart: {20 = twintig, 40 = veertig, 10 = tien, 30 = dertig}
De tekenreeksweergave van kaart:
{20 = twintig, 40 = veertig, 10 = tien, 30 = dertig}
Java 8 Streams gebruiken
Bij deze methode maken we een stream uit de kaartsleutels en converteren we deze naar de string.
Het onderstaande programma toont de conversie van de kaart naar een string met behulp van streams.
Uitgang:
De gegeven kaart: {20 = twintig, 40 = veertig, 10 = tien, 30 = dertig}
De tekenreeksweergave van kaart:
{20 = twintig, 40 = veertig, 10 = tien, 30 = dertig}
Converteer kaart naar lijst in Java
Een kaart bestaat uit sleutels en waarden, terwijl een lijst een reeks afzonderlijke elementen is. Bij het converteren van de kaart naar een lijst, zetten we meestal sleutels om in een lijst met sleutels en waarden in een lijst met waarden.
Het volgende Java-programma toont deze conversie.
Budgetvriendelijke VPN voor Amazon Fire TV Stick
Uitgang:
Lijst met sleutels van de gegeven kaart:
[50, 20, 40, 10, 30]
Lijst met waarden van de gegeven kaart:
[magenta, groen, cyaan, rood, blauw]
Woordenboek Vs. Kaart in Java
Laten we eens kijken naar enkele van de belangrijkste verschillen tussen een woordenboek en een kaart in Java.
Woordenboek | Kaart |
---|---|
Woordenboek is een abstracte klasse. | De kaart is een interface. |
Klassen en methoden die worden gebruikt door het woordenboekklassen dat ouder is dan het raamwerk voor verzamelingen. | Klassen en methoden die door kaartklassen worden gebruikt, maken deel uit van het verzamelframework. |
Als een klasse het woordenboek uitbreidt, kan het geen andere klasse uitbreiden, aangezien Java alleen eenmalige overerving ondersteunt | De kaart is een interface, dus een klasse kan erven van de kaart en andere interfaces |
Oude uitvoering. Bijna achterhaald in nieuwere versies van Java. | De kaartinterface heeft de woordenboekimplementatie vervangen. |
Veel Gestelde Vragen
V # 1) Waarom gebruiken we een kaartinterface in Java?
Antwoord: De kaart is een interface in Java die wordt geïmplementeerd door klassen die gegevens opslaan als sleutel / waarde-paren. Kaartinterface biedt bewerkingen / methoden die kunnen worden uitgevoerd op sleutel / waarde-paren zoals invoegen, bijwerken, verwijderen, enz.
Q # 2)Wat betekent MAP in Java?
Antwoord: Een kaart in Java vertegenwoordigt een afbeelding van een sleutel met een specifieke waarde. Een Java-kaart slaat deze sleutel-waardeparen op in een kaart. We kunnen de waarde die aan een sleutel is gekoppeld, opzoeken en ophalen door de sleutel in de kaart te gebruiken.
Een kaart wordt in Java geïmplementeerd met behulp van een interface die geen deel uitmaakt van de collectie-interface. Maar de kaart is een verzameling.
Q # 3)Wat is MAP?
Antwoord: De get () is een methode die wordt geleverd door een kaartinterface in Java die wordt gebruikt om de waarde op te halen die is gekoppeld aan een bepaalde sleutel die is opgegeven als een argument voor de methode get (). Als de waarde niet aanwezig is, wordt een null geretourneerd.
Q # 4)Is de kaart een verzameling?
Antwoord: Hoewel de kaart in het algemeen als een verzameling wordt beschouwd, is er geen collectie-interface geïmplementeerd. Sommige implementaties van map, zoals treemap, ondersteunen geen null-waarden of sleutels.
Q # 5)Wat is het verschil tussen set en map?
Antwoord: Set is alleen een verzameling sleutels, terwijl de kaart een verzameling sleutel-waardeparen is. Hoewel de set geen null-waarden toestaat, staan sommige mapimplementaties null-waarden toe.
Set staat geen dubbele sleutels toe. De kaart kan dubbele waarden toestaan, maar de sleutels moeten uniek zijn. Set wordt meestal gebruikt wanneer we een verzameling unieke elementen willen opslaan. De kaart kan worden gebruikt wanneer we gegevens moeten opslaan in de vorm van sleutel-waardeparen.
Gevolgtrekking
In deze tutorial hebben we de basisprincipes van de kaartinterface besproken. We hebben ook de verschillende methoden en alle andere details met betrekking tot de kaartinterface in Java gezien. We kwamen erachter dat er verschillende implementaties van kaartinterfaces zijn, waaronder treemap, hashmap, enz.
In onze aanstaande tutorials zullen we deze kaartimplementatie in meer detail bespreken.
Bezoek hier om Java vanaf het begin te leren.
Aanbevolen literatuur
- Wat is een HashMap in Java?
- TreeMap in Java - Tutorial met Java TreeMap-voorbeelden
- LinkedHashMap in Java - LinkedHashMap-voorbeeld en implementatie
- Set-interface in Java: Java-zelfstudie met voorbeelden
- JAVA-zelfstudie voor beginners: 100+ praktische Java-videotutorials
- Java Stack-zelfstudie: Stack Class-implementatie met voorbeelden
- Zelfstudie over reflectie in Java met voorbeelden
- Jagged Array in Java - Tutorial met voorbeelden