V Javě je Map Interface přítomno v balíčku java.util představuje mapování mezi klíčem a hodnotou. Rozhraní Java Map není podtypem rozhraní Rozhraní sběru . Proto se chová trochu jinak než ostatní typy kolekcí. Mapa obsahuje jedinečné klíče.
Geekové, ten brainstorming měl být proč a kdy používat Mapy.
Mapy jsou ideální pro mapování asociací klíč–hodnota, jako jsou slovníky. Mapy se používají k vyhledávání podle klíčů nebo když někdo chce získat a aktualizovat prvky pomocí klíčů. Některé běžné scénáře jsou následující:
- Mapa chybových kódů a jejich popisů.
- Mapa PSČ a měst.
- Mapa manažerů a zaměstnanců. Každému manažerovi (klíči) je přiřazen seznam zaměstnanců (hodnota), které řídí.
- Mapa tříd a studentů. Každá třída (klíč) je spojena se seznamem studentů (hodnota).

Vytváření mapových objektů
Vzhledem k tomu, že mapa je rozhraní , nelze vytvořit objekty typu mapa. Abychom mohli vytvořit objekt, vždy potřebujeme třídu, která tuto mapu rozšiřuje. A také po zavedení Generika v Javě 1.5 je možné omezit typ objektu, který lze uložit do mapy.
Syntax: Definování typově bezpečné mapy
Map hm = new HashMap(); // Obj is the type of the object to be stored in Map>
Charakteristika mapového rozhraní
- Mapa nemůže obsahovat duplicitní klíče a každý klíč může mapovat nejvýše jednu hodnotu. Některé implementace umožňují nulový klíč a hodnoty null, jako je HashMap a LinkedHashMap, ale některým se nelíbí Stromová mapa .
- Pořadí mapy závisí na konkrétních implementacích. Například, Stromová mapa a LinkedHashMap mají předvídatelné objednávky, zatímco HashMap ne.
- Pro implementaci Map v Javě existují dvě rozhraní. Jsou to Map a SortedMap a tři třídy: HashMap, TreeMap a LinkedHashMap.
Metody v Java Map Interface
| Metoda | Akce provedena |
|---|---|
| Průhledná() | Tato metoda se používá v rozhraní Java Map Interface k vymazání a odstranění všech prvků nebo mapování ze zadané kolekce map. |
| obsahujeKey(Objekt) | Tato metoda se používá v Map Interface v Javě ke kontrole, zda je určitý klíč mapován do mapy nebo ne. Vezme klíčový prvek jako parametr a vrátí True, pokud je tento prvek namapován v mapě. |
| obsahujeValue(Objekt) | Tato metoda se používá v Map Interface ke kontrole, zda je konkrétní hodnota mapována jedním nebo více než jedním klíčem v mapě. Vezme hodnotu jako parametr a vrátí hodnotu True, pokud je tato hodnota mapována některým z klíčů v mapě. |
| entrySet() | Tato metoda se používá v Map Interface v Javě k vytvoření sady ze stejných prvků obsažených v mapě. V podstatě vrací nastavený pohled na mapu nebo můžeme vytvořit novou sadu a do ní uložit prvky mapy. |
| rovná se (Objekt) | Tato metoda se používá v Java Map Interface ke kontrole rovnosti mezi dvěma mapami. Ověřuje, zda se prvky jedné mapy předané jako parametr rovnají prvkům této mapy či nikoli. |
| získat (objekt) | Tato metoda se používá k načtení nebo načtení hodnoty mapované konkrétním klíčem uvedeným v parametru. Vrátí NULL, když mapa žádné takové mapování pro klíč neobsahuje. |
| hashCode() | Tato metoda se používá v Map Interface ke generování hashCode pro danou mapu obsahující klíče a hodnoty. |
| je prázdný() | Tato metoda se používá ke kontrole, zda mapa obsahuje nějaké položky pro páry klíčů a hodnot. Pokud žádné mapování neexistuje, vrátí to hodnotu true. |
| keySet() | Tato metoda se používá v rozhraní mapy k vrácení zobrazení sady klíčů obsažených v této mapě. Sada je podložena mapou, takže změny na mapě se projeví v sadě a naopak. |
| dát (objekt, objekt) | Tato metoda se používá v Java Map Interface k přidružení zadané hodnoty k zadanému klíči v této mapě. |
| dát vše (mapa) | Tato metoda se používá v Map Interface v Javě ke zkopírování všech mapování ze zadané mapy do této mapy. |
| odstranit (objekt) | Tato metoda se používá v Map Interface k odstranění mapování klíče z této mapy, pokud je na mapě přítomen. |
| velikost() | Tato metoda se používá k vrácení počtu párů klíč/hodnota dostupných v mapě. |
| hodnoty() | Tato metoda se používá v rozhraní Java Map Interface k vytvoření kolekce z hodnot mapy. V podstatě vrací pohled kolekce hodnot v HashMap. |
| getOrDefault (klíč objektu, V defaultValue) | Vrátí hodnotu, na kterou je zadaný klíč mapován, nebo defaultValue, pokud tato mapa neobsahuje žádné mapování pro klíč. |
| sloučení (klíč K, hodnota V, přemapování funkce BiFunction) | Pokud zadaný klíč ještě není přidružen k hodnotě nebo je přidružen k hodnotě null, přiřaďte jej k dané jiné hodnotě. |
| putIfAbsent (klíč K, hodnota V) | Pokud zadaný klíč ještě není přidružen k hodnotě (nebo je namapován na hodnotu null), přidruží jej k dané hodnotě a vrátí hodnotu null, jinak vrátí aktuální přidruženou hodnotu. |
Příklad:
Jáva
volání funkce js z html
// 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ýstup:
a:100 b:200 c:300 d:400>
Třídy, které implementují rozhraní mapy, jsou znázorněny na níže uvedených médiích a popsány později takto:

1. HashMap
HashMap je součástí kolekce Java od verze Java 1.2. Poskytuje základní implementaci mapového rozhraní Java. Ukládá data v párech (klíč, hodnota). Chcete-li získat přístup k hodnotě, musíte znát její klíč. Tato třída používá techniku zvanou 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ýstup
vaibhav 20 vishal 10 sachin 30>
2. LinkedHashMap
LinkedHashMap je stejně jako HashMap s další funkcí udržování pořadí prvků vložených do něj. HashMap poskytla výhodu rychlého vkládání, vyhledávání a mazání, ale nikdy neudržovala stopu a pořadí vkládání, které poskytuje LinkedHashMap, kde lze přistupovat k prvkům v jejich pořadí vložení. Podívejme se, jak pomocí této třídy vytvořit objekt mapy.
Příklad
Jáva
// 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ýstup
vishal 10 sachin 30 vaibhav 20>
3. Stromová mapa
The TreeMap v Javě se používá k implementaci rozhraní Map a NavigableMap spolu s abstraktní třídou. Mapa je setříděna podle přirozeného pořadí svých klíčů nebo pomocí komparátoru poskytnutého při vytváření mapy, v závislosti na použitém konstruktoru. To se ukazuje jako efektivní způsob třídění a ukládání párů klíč-hodnota. Pořadí ukládání udržované stromovou mapou musí být konzistentní s rovností stejně jako jakákoli jiná seřazená mapa, bez ohledu na explicitní komparátory. Podívejme se, jak pomocí této třídy vytvořit objekt mapy.
Příklad
Jáva
// 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ýstup
sachin 30 vaibhav 20 vishal 10>
Provádění operací pomocí Mapové rozhraní a Třída HashMap
Protože Map je rozhraní, lze jej použít pouze s třídou, která toto rozhraní implementuje. Nyní se podívejme, jak provést několik často používaných operací na mapě pomocí široce používaných Třída HashMap . A také po zavedení Generika v Javě 1.5 je možné omezit typ objektu, který lze do mapy uložit.
1. Přidávání prvků
K přidání prvku do mapy můžeme použít metodu put() . Pořadí vložení však není v hashmap zachováno. Interně je pro každý prvek vygenerován samostatný hash a prvky jsou indexovány na základě tohoto hashu, aby byl efektivnější.
Příklad
Jáva
// 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);> >}> }> |
>
>Výstup
{1=Geeks, 2=For, 3=Geeks} {1=Geeks, 2=For, 3=Geeks}> 2. Změna prvku
Po přidání prvků, pokud chceme prvek změnit, to lze provést opětovným přidáním prvku pomocí metody put(). Vzhledem k tomu, že prvky v mapě jsou indexovány pomocí klíčů, lze hodnotu klíče změnit jednoduchým vložením aktualizované hodnoty klíče, který chceme změnit.
Příklad
Jáva
// 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ýstup
Initial Map {1=Geeks, 2=Geeks, 3=Geeks} Updated Map {1=Geeks, 2=For, 3=Geeks}> 3. Odebrání prvků
K odstranění prvku z mapy můžeme použít metodu remove() . Tato metoda převezme hodnotu klíče a odstraní mapování pro klíč z této mapy, pokud je v mapě přítomen.
Příklad
Jáva
// 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ýstup
{1=Geeks, 2=For, 3=Geeks, 4=For} {1=Geeks, 2=For, 3=Geeks}> 4. Iterace přes mapu
Mapu lze iterovat několika způsoby. Nejznámějším způsobem je použít smyčku for-each a získat klíče. Hodnota klíče se zjistí pomocí metody getValue().
Příklad
Jáva
// 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ýstup
1 : Geeks 2 : For 3 : Geeks>
5. Spočítejte výskyt čísel pomocí Hashmap
V tomto kódu používáme putIfAbsent( ) spolu s Collections.frequency() spočítat přesný výskyt čísel. V mnoha programech musíte počítat výskyt určitého čísla nebo písmena. K řešení těchto typů problémů používáte následující přístup
char tostring java
Jáva
// 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ýstup
{1=2, 2=1, 4=2, 41=1, 13=2, 31=2}> Nejčastější dotazy v rozhraní Java Map
Q1. Co je mapové rozhraní v Javě?
Odpovědět:
Mapa obsahuje páry klíč-hodnota, kde k prvkům v mapě přistupujeme pomocí klíčových hodnot.
Q2. Jaké jsou typy mapových rozhraní v Javě?
Odpovědět:
Existují 3 implementace mapového rozhraní HashMap, LinkedHashMap a TreeMap.