logo

Mapové rozhraní v Javě

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).

Mapové rozhraní v Javě

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í

  1. 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 .
  2. 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.
  3. 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:

Mapové rozhraní

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.