logo

Mapové rozhranie v Jave

V jazyku Java je rozhranie mapy prítomné v balíku java.util, ktorý predstavuje mapovanie medzi kľúčom a hodnotou. Rozhranie Java Map nie je podtypom Rozhranie zberu . Preto sa správa trochu inak ako ostatné typy kolekcií. Mapa obsahuje jedinečné kľúče.

Geeks, brainstorming by mal byť prečo a kedy používať Mapy.



Mapy sú ideálne na použitie na mapovanie asociácie kľúč – hodnota, ako sú napríklad slovníky. Mapy sa používajú na vyhľadávanie podľa kľúčov alebo keď chce niekto získať a aktualizovať prvky pomocou kľúčov. Niektoré bežné scenáre sú nasledovné:

  • Mapa chybových kódov a ich popisov.
  • Mapa PSČ a miest.
  • Mapa manažérov a zamestnancov. Každému manažérovi (kľúču) je priradený zoznam zamestnancov (hodnota), ktorých riadi.
  • Mapa tried a študentov. Každá trieda (kľúč) je spojená so zoznamom študentov (hodnota).

Mapové rozhranie v Jave

Vytváranie objektov mapy

Keďže mapa je an rozhranie , nemožno vytvárať objekty typu mapa. Na vytvorenie objektu vždy potrebujeme triedu, ktorá túto mapu rozširuje. A tiež po zavedení Generiká v Java 1.5 je možné obmedziť typ objektu, ktorý je možné uložiť do mapy.



Syntax: Definovanie typovo bezpečnej mapy

Map hm = new HashMap(); // Obj is the type of the object to be stored in Map>

Charakteristika mapového rozhrania

  1. Mapa nemôže obsahovať duplicitné kľúče a každý kľúč sa môže mapovať maximálne na jednu hodnotu. Niektoré implementácie umožňujú nulový kľúč a nulové hodnoty, ako napríklad HashMap a LinkedHashMap, ale niektorým sa nepáči Stromová mapa .
  2. Poradie mapy závisí od konkrétnych implementácií. Napríklad, Stromová mapa a LinkedHashMap majú predvídateľné objednávky, zatiaľ čo HashMap nie.
  3. Na implementáciu mapy v jazyku Java existujú dve rozhrania. Sú to Map a SortedMap a tri triedy: HashMap, TreeMap a LinkedHashMap.

Metódy v Java Map Interface

Metóda Akcia vykonaná
jasný() Táto metóda sa používa v rozhraní Java Map Interface na vymazanie a odstránenie všetkých prvkov alebo mapovaní zo špecifikovanej kolekcie máp.
obsahuje kľúč (objekt) Táto metóda sa používa v Map Interface v Jave na kontrolu, či sa konkrétny kľúč mapuje do mapy alebo nie. Vezme kľúčový prvok ako parameter a vráti hodnotu True, ak je prvok namapovaný na mape.
obsahujeValue(Objekt) Táto metóda sa používa v rozhraní mapy na kontrolu, či je konkrétna hodnota mapovaná jedným alebo viacerými kľúčmi na mape. Hodnotu berie ako parameter a vráti hodnotu True, ak je táto hodnota namapovaná ktorýmkoľvek z kľúčov na mape.
entrySet() Táto metóda sa používa v Map Interface v Jave na vytvorenie súboru z rovnakých prvkov obsiahnutých v mape. V podstate vracia nastavený pohľad na mapu alebo môžeme vytvoriť nový súbor a do nich uložiť prvky mapy.
rovná sa (Objekt) Táto metóda sa používa v rozhraní Java Map Interface na kontrolu rovnosti medzi dvoma mapami. Overuje, či sa prvky jednej mapy odovzdané ako parameter zhodujú s prvkami tejto mapy alebo nie.
získať (objekt) Táto metóda sa používa na načítanie alebo načítanie hodnoty mapovanej konkrétnym kľúčom uvedeným v parametri. Vracia hodnotu NULL, keď mapa neobsahuje žiadne takéto mapovanie pre kľúč.
hashCode() Táto metóda sa používa v Map Interface na generovanie hashCode pre danú mapu obsahujúcu kľúče a hodnoty.
je prázdny() Táto metóda sa používa na kontrolu, či mapa obsahuje nejaké položky pre páry kľúčov a hodnôt. Ak žiadne mapovanie neexistuje, vráti to hodnotu true.
keySet() Táto metóda sa používa v rozhraní mapy na vrátenie zobrazenia Set kľúčov obsiahnutých v tejto mape. Sada je podporovaná mapou, takže zmeny na mape sa prejavia v sade a naopak.
vložiť (Objekt, Objekt) Táto metóda sa používa v rozhraní Java Map Interface na priradenie zadanej hodnoty k zadanému kľúču v tejto mape.
dať všetko (mapa) Táto metóda sa používa v Map Interface v Jave na skopírovanie všetkých mapovaní zo zadanej mapy do tejto mapy.
odstrániť (objekt) Táto metóda sa používa v rozhraní mapy na odstránenie mapovania pre kľúč z tejto mapy, ak je na mape prítomný.
veľkosť () Táto metóda sa používa na vrátenie počtu párov kľúč/hodnota dostupných na mape.
hodnoty() Táto metóda sa používa v rozhraní Java Map Interface na vytvorenie kolekcie z hodnôt mapy. V podstate vracia pohľad na kolekciu hodnôt v HashMape.
getOrDefault (kľúč objektu, V predvolená hodnota) Vráti hodnotu, na ktorú je zadaný kľúč namapovaný, alebo defaultValue, ak táto mapa neobsahuje žiadne mapovanie pre kľúč.
zlúčenie (kľúč K, hodnota V, premapovanie funkcie BiFunction) Ak zadaný kľúč ešte nie je priradený k hodnote alebo je priradený k hodnote null, priraďte ho k danej nenulovej hodnote.
putIfAbsent (kľúč K, hodnota V) Ak zadaný kľúč ešte nie je priradený k hodnote (alebo je namapovaný na hodnotu null), priradí ho k danej hodnote a vráti hodnotu null, inak vráti aktuálnu priradenú hodnotu.

Príklad:

Java






// Java Program to Demonstrate> // Working of Map interface> > // Importing required classes> import> java.util.*;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an empty HashMap> >Map hm> >=>new> HashMap();> > >// Inserting pairs in above Map> >// using put() method> >hm.put(>'a'>,>new> Integer(>100>));> >hm.put(>'b'>,>new> Integer(>200>));> >hm.put(>'c'>,>new> Integer(>300>));> >hm.put(>'d'>,>new> Integer(>400>));> > >// Traversing through Map using for-each loop> >for> (Map.Entry me :> >hm.entrySet()) {> > >// Printing keys> >System.out.print(me.getKey() +>':'>);> >System.out.println(me.getValue());> >}> >}> }>

>

>

Výkon:

a:100 b:200 c:300 d:400>

Triedy, ktoré implementujú rozhranie mapy, sú znázornené na nižšie uvedených médiách a popísané neskôr takto:

murársky vzorec

Mapové rozhranie

1. HashMap

HashMap je súčasťou kolekcie Java od verzie Java 1.2. Poskytuje základnú implementáciu mapového rozhrania Java. Údaje ukladá v pároch (kľúč, hodnota). Ak chcete získať prístup k hodnote, musíte poznať jej kľúč. Táto trieda používa techniku ​​nazývanú Java




// Java Program to illustrate the Hashmap Class> > // Importing required classes> import> java.util.*;> > // Main class> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> > >// Creating an empty HashMap> >Map map =>new> HashMap();> > >// Inserting entries in the Map> >// using put() method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> > >// Iterating over Map> >for> (Map.Entry e : map.entrySet())> > >// Printing key-value pairs> >System.out.println(e.getKey() +>' '> >+ e.getValue());> >}> }>

>

>

Výkon

vaibhav 20 vishal 10 sachin 30>

2. LinkedHashMap

LinkedHashMap je rovnako ako HashMap s ďalšou funkciou udržiavania poradia prvkov vložených do nej. HashMap poskytoval výhodu rýchleho vkladania, vyhľadávania a odstraňovania, ale nikdy neudržiaval stopu a poradie vkladania, ktoré poskytuje LinkedHashMap, kde je možné pristupovať k prvkom v poradí ich vloženia. Pozrime sa, ako pomocou tejto triedy vytvoriť objekt mapy.

Príklad

Java




// Java Program to Illustrate the LinkedHashmap Class> > // Importing required classes> import> java.util.*;> > // Main class> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> > >// Creating an empty LinkedHashMap> >Map map =>new> LinkedHashMap();> > >// Inserting pair entries in above Map> >// using put() method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> > >// Iterating over Map> >for> (Map.Entry e : map.entrySet())> > >// Printing key-value pairs> >System.out.println(e.getKey() +>' '> >+ e.getValue());> >}> }>

>

>

Výkon

vishal 10 sachin 30 vaibhav 20>

3. Stromová mapa

The TreeMap v jazyku Java sa používa na implementáciu rozhrania Map a NavigableMap spolu s abstraktnou triedou. Mapa je zoradená podľa prirodzeného poradia jej kľúčov alebo pomocou komparátora, ktorý sa poskytuje pri vytváraní mapy, v závislosti od použitého konštruktora. Toto sa ukazuje ako efektívny spôsob triedenia a ukladania párov kľúč – hodnota. Poradie ukladania udržiavané stromovou mapou musí byť konzistentné s rovnakým ako každá iná triedená mapa, bez ohľadu na explicitné porovnávače. Pozrime sa, ako pomocou tejto triedy vytvoriť objekt mapy.

Príklad

Java




// Java Program to Illustrate TreeMap Class> > // Importing required classes> import> java.util.*;> > // Main class> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> > >// Creating an empty TreeMap> >Map map =>new> TreeMap();> > >// Inserting custom elements in the Map> >// using put() method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> > >// Iterating over Map using for each loop> >for> (Map.Entry e : map.entrySet())> > >// Printing key-value pairs> >System.out.println(e.getKey() +>' '> >+ e.getValue());> >}> }>

>

>

Výkon

ako previesť str na int
sachin 30 vaibhav 20 vishal 10>

Vykonávanie operácií pomocou Rozhranie mapy a Trieda HashMap

Keďže Map je rozhranie, možno ho použiť iba s triedou, ktorá toto rozhranie implementuje. Teraz sa pozrime, ako vykonať niekoľko často používaných operácií na mape pomocou bežne používaných Trieda HashMap . A tiež po zavedení Generiká v Java 1.5 je možné obmedziť typ objektu, ktorý je možné uložiť do mapy.

1. Pridávanie prvkov

Na pridanie prvku do mapy môžeme použiť metódu put() . Poradie vloženia sa však v hashmap nezachová. Interne sa pre každý prvok vygeneruje samostatný hash a prvky sa indexujú na základe tohto hashu, aby bol efektívnejší.

Príklad

Java




// Java program to demonstrate> // the working of Map interface> > import> java.util.*;> class> GFG {> >public> static> void> main(String args[])> >{> >// Default Initialization of a> >// Map> >Map hm1 =>new> HashMap();> > >// Initialization of a Map> >// using Generics> >Map hm2> >=>new> HashMap();> > >// Inserting the Elements> >hm1.put(>1>,>'Geeks'>);> >hm1.put(>2>,>'For'>);> >hm1.put(>3>,>'Geeks'>);> > >hm2.put(>new> Integer(>1>),>'Geeks'>);> >hm2.put(>new> Integer(>2>),>'For'>);> >hm2.put(>new> Integer(>3>),>'Geeks'>);> > >System.out.println(hm1);> >System.out.println(hm2);> >}> }>

tlač výpisu v jazyku Java

>

>

Výkon

{1=Geeks, 2=For, 3=Geeks} {1=Geeks, 2=For, 3=Geeks}>

2. Zmena prvku

Po pridaní prvkov, ak chceme prvok zmeniť, môžeme to urobiť opätovným pridaním prvku pomocou metódy put(). Keďže prvky na mape sú indexované pomocou kľúčov, hodnotu kľúča je možné zmeniť jednoduchým vložením aktualizovanej hodnoty pre kľúč, ktorý chceme zmeniť.

Príklad

Java




// Java program to demonstrate> // the working of Map interface> > import> java.util.*;> class> GFG {> >public> static> void> main(String args[])> >{> > >// Initialization of a Map> >// using Generics> >Map hm1> >=>new> HashMap();> > >// Inserting the Elements> >hm1.put(>new> Integer(>1>),>'Geeks'>);> >hm1.put(>new> Integer(>2>),>'Geeks'>);> >hm1.put(>new> Integer(>3>),>'Geeks'>);> > >System.out.println(>'Initial Map '> + hm1);> > >hm1.put(>new> Integer(>2>),>'For'>);> > >System.out.println(>'Updated Map '> + hm1);> >}> }>

>

>

Výkon

Initial Map {1=Geeks, 2=Geeks, 3=Geeks} Updated Map {1=Geeks, 2=For, 3=Geeks}>

3. Odstránenie prvkov

Na odstránenie prvku z mapy môžeme použiť metódu remove() . Táto metóda prevezme hodnotu kľúča a odstráni mapovanie pre kľúč z tejto mapy, ak sa na mape nachádza.

Príklad

Java




// Java program to demonstrate> // the working of Map interface> > import> java.util.*;> class> GFG {> > >public> static> void> main(String args[])> >{> > >// Initialization of a Map> >// using Generics> >Map hm1> >=>new> HashMap();> > >// Inserting the Elements> >hm1.put(>new> Integer(>1>),>'Geeks'>);> >hm1.put(>new> Integer(>2>),>'For'>);> >hm1.put(>new> Integer(>3>),>'Geeks'>);> >hm1.put(>new> Integer(>4>),>'For'>);> > >// Initial Map> >System.out.println(hm1);> > >hm1.remove(>new> Integer(>4>));> > >// Final Map> >System.out.println(hm1);> >}> }>

>

>

Výkon

java virtuálny stroj
{1=Geeks, 2=For, 3=Geeks, 4=For} {1=Geeks, 2=For, 3=Geeks}>

4. Iterácia cez mapu

Existuje niekoľko spôsobov, ako iterovať cez mapu. Najznámejším spôsobom je použiť slučku pre každého a získať kľúče. Hodnota kľúča sa zistí pomocou metódy getValue().

Príklad

Java




// Java program to demonstrate> // the working of Map interface> > import> java.util.*;> class> GFG {> >public> static> void> main(String args[])> >{> > >// Initialization of a Map> >// using Generics> >Map hm1> >=>new> HashMap();> > >// Inserting the Elements> >hm1.put(>new> Integer(>1>),>'Geeks'>);> >hm1.put(>new> Integer(>2>),>'For'>);> >hm1.put(>new> Integer(>3>),>'Geeks'>);> > >for> (Map.Entry mapElement : hm1.entrySet()) {> >int> key = (>int>)mapElement.getKey();> > >// Finding the value> >String value = (String)mapElement.getValue();> > >System.out.println(key +>' : '> + value);> >}> >}> }>

>

>

Výkon

1 : Geeks 2 : For 3 : Geeks>

5. Spočítajte výskyt čísel pomocou Hashmap

V tomto kóde používame putIfAbsent( ) spolu s Collections.frequency() spočítať presný výskyt čísel. V mnohých programoch musíte počítať výskyt konkrétneho čísla alebo písmena. Na riešenie týchto typov problémov používate nasledujúci prístup

Java




// Java program to Count the Occurrence> // of numbers using Hashmap> import> java.util.*;> > class> HelloWorld {> >public> static> void> main(String[] args)> >{> >int> a[] = {>1>,>13>,>4>,>1>,>41>,>31>,>31>,>4>,>13>,>2> };> > >// put all elements in arraylist> >ArrayList aa =>new> ArrayList();> >for> (>int> i =>0>; i aa.add(a[i]); } HashMap h = new HashMap(); // counting occurrence of numbers for (int i = 0; i h.putIfAbsent(aa.get(i), Collections.frequency( aa, aa.get(i))); } System.out.println(h); } }>

>

>

Výkon

{1=2, 2=1, 4=2, 41=1, 13=2, 31=2}>

Často kladené otázky v rozhraní Java Map Interface

Q1. Čo je to mapové rozhranie v Jave?

odpoveď:

Mapa obsahuje páry kľúč – hodnota, kde pristupujeme k prvkom v mape pomocou hodnôt kľúča.

Q2. Aké sú typy mapových rozhraní v Jave?

odpoveď:

Existujú 3 implementácie mapového rozhrania HashMap, LinkedHashMap a TreeMap.