Jakákoli skupina jednotlivých objektů, které jsou reprezentovány jako jedna jednotka, se nazývá Java Collection of Objects. V Javě je samostatný framework s názvem Collection Framework byl definován v JDK 1.2, který obsahuje všechny třídy Java Collection Classes a rozhraní.
V Javě je rozhraní kolekce ( java.util.Collection ) a rozhraní mapy ( java.util.Map ) jsou dvě hlavní kořenová rozhraní tříd kolekce Java.
Co byste se měli naučit v kolekcích Java?
- Rozhraní seznamu
- Abstraktní seznam třída
- Abstraktní třída sekvenčního seznamu
- Seznam polí
- Vektorové třídy
- Třída zásobníku
- Třída LinkedList
- Rozhraní fronty
- Blokování rozhraní fronty
- Třída AbstractQueue
- Třída PriorityQueue
- Třída PriorityBlockingQueue
- Třída ConcurrentLinkedQueue
- Třída ArrayBlockingQueue
- Třída DelayQueue
- Třída LinkedBlockingQueue
- LinkedTransferQueue
- A rozhraní
- Rozhraní BlockingDeque
- Třída ConcurrentLinkedDeque
- Třída ArrayDeque
- Nastavit rozhraní
- Abstraktní sada třídy
- Třída CopyOnWriteArraySet
- Třída EnumSet
- Třída ConcurrentHashMap
- Třída HashSet
- Třída LinkedHashSet
- Rozhraní SortedSet
- Rozhraní NavigableSet
- TreeSet
- Třída ConcurrentSkipListSet
- Mapové rozhraní
- Rozhraní SortedMap
- Rozhraní NavigableMap
- Rozhraní ConcurrentMap
- Třída stromové mapy
- Třída abstraktní mapy
- Třída ConcurrentHashMap
- Třída EnumMap
- Třída HashMap
- Třída IdentityHashMap
- Třída LinkedHashMap
- Třída HashTable
- Třída vlastností
- Další důležité pojmy
- Jak převést HashMap na ArrayList
- Náhodně vyberte položky ze seznamu
- Jak přidat všechny položky z kolekce do ArrayList
- Převod Java map na seznam
- Konverze pole na seznam Array
- Konverze ArrayList na Array
- Rozdíly mezi Array a ArrayList
Co je to framework v Javě?
Rámec je sada tříd a rozhraní, které poskytují hotovou architekturu. Aby bylo možné implementovat novou funkci nebo třídu, není nutné definovat rámec. Optimální objektově orientovaný návrh však vždy zahrnuje rámec s kolekcí tříd, takže všechny třídy provádějí stejný druh úkolu.
Potřeba samostatného sběrného rámce v Javě
Před zavedením Collection Framework (nebo před JDK 1.2) byly standardní metody pro seskupování Java objektů (nebo kolekcí) Pole nebo vektory nebo Hashtables . Všechny tyto kolekce neměly společné rozhraní. Proto, ačkoli hlavní cíl všech kolekcí je stejný, realizace všech těchto kolekcí byla definována nezávisle a neměla mezi nimi žádnou korelaci. A také je pro uživatele velmi obtížné zapamatovat si vše odlišné metody , syntaxe a konstruktéři přítomné v každé třídě sbírky.
Pojďme to pochopit na příkladu přidání prvku do hashtable a vektoru.
funkce v c
Příklad:
Jáva
// Java program to demonstrate> // why collection framework was needed> import> java.io.*;> import> java.util.*;> class> CollectionDemo {> >public> static> void> main(String[] args)> >{> >// Creating instances of the array,> >// vector and hashtable> >int> arr[] =>new> int>[] {>1>,>2>,>3>,>4> };> >Vector v =>new> Vector();> >Hashtable h =>new> Hashtable();> >// Adding the elements into the> >// vector> >v.addElement(>1>);> >v.addElement(>2>);> >// Adding the element into the> >// hashtable> >h.put(>1>,>'geeks'>);> >h.put(>2>,>'4geeks'>);> >// Array instance creation requires [],> >// while Vector and hastable require ()> >// Vector element insertion requires addElement(),> >// but hashtable element insertion requires put()> >// Accessing the first element of the> >// array, vector and hashtable> >System.out.println(arr[>0>]);> >System.out.println(v.elementAt(>0>));> >System.out.println(h.get(>1>));> >// Array elements are accessed using [],> >// vector elements using elementAt()> >// and hashtable elements using get()> >}> }> |
>
>Výstup
1 1 geeks>
Jak můžeme pozorovat, žádná z těchto kolekcí (Array, Vector nebo Hashtable) neimplementuje standardní rozhraní pro přístup členů, pro programátory bylo velmi obtížné napsat algoritmy, které mohou fungovat pro všechny druhy kolekcí. Další nevýhodou je, že většina metod ‚Vector‘ je konečná, což znamená, že třídu ‚Vector‘ nemůžeme rozšířit tak, aby implementovala podobný druh kolekce. Vývojáři Javy se proto rozhodli přijít se společným rozhraním, které by se vypořádalo s výše uvedenými problémy, a představili Collection Framework v příspěvku JDK 1.2, který byly upraveny jak starší vektory, tak hashtables, aby odpovídaly Collection Framework.
Výhody Java Collection Framework
Vzhledem k tomu, že nedostatek rámce kolekce způsobil výše uvedený soubor nevýhod, uvádíme výhody rámce kolekce.
- Konzistentní API: API má základní sadu rozhraní jako Sbírka , Soubor , Seznam nebo Mapa , všechny třídy (ArrayList, LinkedList, Vector atd.), které implementují tato rozhraní, mají nějaký společný soubor metod.
- Snižuje námahu při programování: Programátor se nemusí starat o design kolekce, ale může se soustředit na její nejlepší využití ve svém programu. Proto byl úspěšně implementován základní koncept objektově orientovaného programování (tj. abstrakce).
- Zvyšuje rychlost a kvalitu programu: Zvyšuje výkon poskytováním vysoce výkonných implementací užitečných datových struktur a algoritmů, protože v tomto případě nemusí programátor přemýšlet o nejlepší implementaci konkrétní datové struktury. Může jednoduše použít nejlepší implementaci k drastickému zvýšení výkonu svého algoritmu/programu.
Hierarchie Collection Framework v Javě
Obslužný balíček (java.util) obsahuje všechny třídy a rozhraní, které vyžaduje framework kolekce. Rámec kolekce obsahuje rozhraní s názvem iterovatelné rozhraní, které poskytuje iterátoru pro iteraci všemi kolekcemi. Toto rozhraní je rozšířeno o hlavní rozhraní kolekce, které funguje jako kořen pro framework kolekce. Všechny kolekce rozšiřují toto rozhraní kolekce, čímž rozšiřují vlastnosti iterátoru a metody tohoto rozhraní. Následující obrázek ilustruje hierarchii rámce kolekce.
Než pochopíme různé komponenty ve výše uvedeném rámci, pojďme nejprve porozumět třídě a rozhraní.
- Třída : Třída je uživatelsky definovaný plán nebo prototyp, ze kterého jsou vytvářeny objekty. Představuje soubor vlastností nebo metod, které jsou společné všem objektům jednoho typu.
- Rozhraní : Stejně jako třída může mít rozhraní metody a proměnné, ale metody deklarované v rozhraní jsou ve výchozím nastavení abstraktní (pouze podpis metody, nikdo). Rozhraní určují, co musí třída dělat a ne jak. Je to plán třídy.
Metody sběrného rozhraní
Toto rozhraní obsahuje různé metody, které mohou přímo používat všechny kolekce, které toto rozhraní implementují. Oni jsou:
| Metoda | Popis |
|---|---|
| přidat (objekt) | Tato metoda se používá k přidání objektu do kolekce. |
| addAll(kolekce c) | Tato metoda přidá do této kolekce všechny prvky v dané kolekci. |
| Průhledná() | Tato metoda odstraní všechny prvky z této kolekce. |
| obsahuje (Objekt o) | Tato metoda vrátí hodnotu true, pokud kolekce obsahuje zadaný prvek. |
| obsahuje vše (kolekce c) | Tato metoda vrátí hodnotu true, pokud kolekce obsahuje všechny prvky v dané kolekci. |
| rovná se (objekt o) | Tato metoda porovnává zadaný objekt s touto kolekcí pro dosažení rovnosti. |
| hashCode() | Tato metoda se používá k vrácení hodnoty hash kódu pro tuto kolekci. |
| je prázdný() | Tato metoda vrátí hodnotu true, pokud tato kolekce neobsahuje žádné prvky. |
| iterátor() | Tato metoda vrací iterátor nad prvky v této kolekci. |
| max() | Tato metoda se používá k vrácení maximální hodnoty přítomné v kolekci. |
| paralelní proud() | Tato metoda vrací paralelní proud s touto kolekcí jako jejím zdrojem. |
| odstranit (objekt o) | Tato metoda slouží k odstranění daného objektu z kolekce. Pokud existují duplicitní hodnoty, pak tato metoda odstraní první výskyt objektu. |
| odstranit vše (kolekce c) | Tato metoda slouží k odstranění všech objektů uvedených v dané kolekci z kolekce. |
| removeIf (filtr predikátu) | Tato metoda se používá k odstranění všech prvků této kolekce, které splňují dané predikát . |
| zachovat vše (kolekce c) | Tato metoda se používá k zachování pouze prvků v této kolekci, které jsou obsaženy v zadané kolekci. |
| velikost() | Tato metoda se používá k vrácení počtu prvků v kolekci. |
| rozdělovač() | Tato metoda se používá k vytvoření a Spliterátor nad prvky v této kolekci. |
| proud() | Tato metoda se používá k vrácení sekvenčního proudu s touto kolekcí jako jejím zdrojem. |
| toArray() | Tato metoda se používá k vrácení pole obsahujícího všechny prvky v této kolekci. |
Rozhraní, která rozšiřují rozhraní Java Collections
Sběrný rámec obsahuje několik rozhraní, kde každé rozhraní slouží k ukládání určitého typu dat. Následují rozhraní přítomná v rámci.
1. Iterovatelné rozhraní
Toto je kořenové rozhraní pro celý rámec kolekce. Rozhraní kolekce rozšiřuje iterovatelné rozhraní. Proto ze své podstaty všechna rozhraní a třídy implementují toto rozhraní. Hlavní funkcí tohoto rozhraní je poskytovat iterátor pro kolekce. Proto toto rozhraní obsahuje pouze jednu abstraktní metodu, kterou je iterátor. Vrací to
Iterator iterator(); >
2. Rozhraní kolekce
Toto rozhraní rozšiřuje iterovatelné rozhraní a je implementováno všemi třídami v rámci kolekce. Toto rozhraní obsahuje všechny základní metody, které má každá kolekce, jako je přidání dat do kolekce, odstranění dat, vymazání dat atd. Všechny tyto metody jsou implementovány v tomto rozhraní, protože tyto metody jsou implementovány všemi třídami bez ohledu na jejich styl implementace. A také to, že tyto metody budou v tomto rozhraní, zajistí, že názvy metod budou univerzální pro všechny kolekce. Stručně tedy můžeme říci, že toto rozhraní staví základ, na kterém jsou implementovány třídy kolekce.
3. Rozhraní seznamu
Toto je podřízené rozhraní rozhraní kolekce. Toto rozhraní je určeno pro data typu seznam, do kterého můžeme ukládat všechny objednané kolekce objektů. To také umožňuje, aby v něm byla přítomna duplicitní data. Toto rozhraní seznamu je implementováno různými třídami jako ArrayList, Vector, Stack atd. Protože všechny podtřídy implementují seznam, můžeme vytvořit instanci objektu seznamu s kteroukoli z těchto tříd.
Například:
List al = new ArrayList (); List ll = new LinkedList (); List v = new Vector (); Where T is the type of the object >
Třídy, které implementují rozhraní Seznam, jsou následující:
i). ArrayList
ArrayList nám poskytuje dynamická pole v Javě. Může to být pomalejší než standardní pole, ale může být užitečné v programech, kde je potřeba spousta manipulace s polem. Velikost ArrayList se automaticky zvětší, pokud kolekce roste nebo se zmenšuje, pokud jsou objekty z kolekce odstraněny. Java ArrayList nám umožňuje náhodný přístup k seznamu. ArrayList nelze použít pro obalová třída pro takové případy.
Pojďme pochopit ArrayList s následujícím příkladem:
Jáva
// Java program to demonstrate the> // working of ArrayList> import> java.io.*;> import> java.util.*;> class> GFG {> >// Main Method> >public> static> void> main(String[] args)> >{> >// Declaring the ArrayList with> >// initial size n> >ArrayList al =>new> ArrayList();> >// Appending new elements at> >// the end of the list> >for> (>int> i =>1>; i <=>5>; i++)> >al.add(i);> >// Printing elements> >System.out.println(al);> >// Remove element at index 3> >al.remove(>3>);> >// Displaying the ArrayList> >// after deletion> >System.out.println(al);> >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(al.get(i) + ' '); } }> |
>
>Výstup
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
ii). Spojový seznam
Třída LinkedList je implementací třídy Pojďme pochopit LinkedList s následujícím příkladem:
Jáva
// Java program to demonstrate the> // working of LinkedList> import> java.io.*;> import> java.util.*;> class> GFG {> >// Main Method> >public> static> void> main(String[] args)> >{> >// Declaring the LinkedList> >LinkedList ll =>new> LinkedList();> >// Appending new elements at> >// the end of the list> >for> (>int> i =>1>; i <=>5>; i++)> >ll.add(i);> >// Printing elements> >System.out.println(ll);> >// Remove element at index 3> >ll.remove(>3>);> >// Displaying the List> >// after deletion> >System.out.println(ll);> >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(ll.get(i) + ' '); } }> |
>
>Výstup
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
iii). Vektor
Vektor nám poskytuje dynamická pole v Javě. Může to být pomalejší než standardní pole, ale může být užitečné v programech, kde je potřeba spousta manipulace s polem. To je z hlediska implementace totožné s ArrayList. Primární rozdíl mezi vektorem a ArrayList je však v tom, že Vector je synchronizovaný a ArrayList je nesynchronizovaný.
Pojďme pochopit vektor na příkladu:
Jáva
// Java program to demonstrate the> // working of Vector> import> java.io.*;> import> java.util.*;> class> GFG {> >// Main Method> >public> static> void> main(String[] args)> >{> >// Declaring the Vector> >Vector v =>new> Vector();> >// Appending new elements at> >// the end of the list> >for> (>int> i =>1>; i <=>5>; i++)> >v.add(i);> >// Printing elements> >System.out.println(v);> >// Remove element at index 3> >v.remove(>3>);> >// Displaying the Vector> >// after deletion> >System.out.println(v);> >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(v.get(i) + ' '); } }> |
>
>Výstup
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
iv). Zásobník
Třída zásobníků modeluje a implementujelast-in-first-out. Kromě základních operací push a pop nabízí třída další tři funkce prázdné, hledání a nahlédnutí. Třída může být také označována jako podtřída Vector.
Pojďme pochopit zásobník na příkladu:
Jáva
// Java program to demonstrate the> // working of a stack> import> java.util.*;> public> class> GFG {> >// Main Method> >public> static> void> main(String args[])> >{> >Stack stack =>new> Stack();> >stack.push(>'Geeks'>);> >stack.push(>'For'>);> >stack.push(>'Geeks'>);> >stack.push(>'Geeks'>);> >// Iterator for the stack> >Iterator itr = stack.iterator();> >// Printing the stack> >while> (itr.hasNext()) {> >System.out.print(itr.next() +>);> >}> >System.out.println();> >stack.pop();> >// Iterator for the stack> >itr = stack.iterator();> >// Printing the stack> >while> (itr.hasNext()) {> >System.out.print(itr.next() +>);> >}> >}> }> |
>
>Výstup
Geeks For Geeks Geeks Geeks For Geeks>
Poznámka: Stack je podtřída Vector a starší třída. Je bezpečný pro vlákna, což může být nad hlavou v prostředí, kde není bezpečnost vlákna potřeba. Je možné použít alternativu ke Stack ArrayDequeue který není bezpečný pro vlákna a má rychlejší implementaci pole.
4. Rozhraní fronty
Jak název napovídá, rozhraní fronty udržuje pořadí FIFO (First In First Out) podobné řádce fronty v reálném světě. Toto rozhraní je určeno k ukládání všech prvků, kde záleží na pořadí prvků. Kdykoli se například pokusíme zarezervovat vstupenku, vstupenky se prodávají podle zásady „kdo dřív přijde, je dřív na řadě“. Lístek tedy získá ten, jehož požadavek dorazí jako první do fronty. Existují různé třídy jako PriorityQueue , ArrayDeque , atd. Protože všechny tyto podtřídy implementují frontu, můžeme vytvořit instanci objektu fronty s kteroukoli z těchto tříd.
Například:
Queue pq = new PriorityQueue (); Queue ad = new ArrayDeque (); Where T is the type of the object. >
Nejčastěji používanou implementací rozhraní fronty je PriorityQueue.
Prioritní fronta
PriorityQueue se používá, když se předpokládá, že objekty budou zpracovány na základě priority. Je známo, že fronta se řídí algoritmem First-In-First-Out, ale někdy je potřeba zpracovat prvky fronty podle priority a v těchto případech se používá tato třída. PriorityQueue je založena na prioritní haldě. Prvky prioritní fronty jsou seřazeny podle přirozeného řazení nebo podle a Komparátor poskytované v době vytváření fronty v závislosti na použitém konstruktoru.
Pojďme porozumět prioritní frontě na příkladu:
Jáva
// Java program to demonstrate the working of> // priority queue in Java> import> java.util.*;> class> GfG {> >// Main Method> >public> static> void> main(String args[])> >{> >// Creating empty priority queue> >PriorityQueue pQueue> >=>new> PriorityQueue();> >// Adding items to the pQueue using add()> >pQueue.add(>10>);> >pQueue.add(>20>);> >pQueue.add(>15>);> >// Printing the top element of PriorityQueue> >System.out.println(pQueue.peek());> >// Printing the top element and removing it> >// from the PriorityQueue container> >System.out.println(pQueue.poll());> >// Printing the top element again> >System.out.println(pQueue.peek());> >}> }> |
>
>Výstup
10 10 15>
5. A rozhraní
Jedná se o velmi malou variaci Například:
Deque ad = new ArrayDeque (); Where T is the type of the object. >
Třída, která implementuje rozhraní deque, je ArrayDeque.
ArrayDeque
Třída ArrayDeque, která je implementována v rámci kolekce, nám poskytuje způsob, jak aplikovat pole s měnitelnou velikostí. Jedná se o speciální druh pole, které roste a umožňuje uživatelům přidat nebo odebrat prvek z obou stran fronty. Pole deque nemají žádná omezení kapacity a podle potřeby se rozrůstají, aby podporovaly používání.
Pojďme pochopit ArrayDeque na příkladu:
Jáva
// Java program to demonstrate the> // ArrayDeque class in Java> import> java.util.*;> public> class> ArrayDequeDemo {> >public> static> void> main(String[] args)> >{> >// Initializing an deque> >ArrayDeque de_que> >=>new> ArrayDeque(>10>);> >// add() method to insert> >de_que.add(>10>);> >de_que.add(>20>);> >de_que.add(>30>);> >de_que.add(>40>);> >de_que.add(>50>);> >System.out.println(de_que);> >// clear() method> >de_que.clear();> >// addFirst() method to insert the> >// elements at the head> >de_que.addFirst(>564>);> >de_que.addFirst(>291>);> >// addLast() method to insert the> >// elements at the tail> >de_que.addLast(>24>);> >de_que.addLast(>14>);> >System.out.println(de_que);> >}> }> |
>
>Výstup
[10, 20, 30, 40, 50] [291, 564, 24, 14]>
6. Nastavit rozhraní
Sada je neuspořádaná kolekce objektů, do kterých nelze uložit duplicitní hodnoty. Tato kolekce se používá, když se chceme vyhnout duplicitě objektů a chceme ukládat pouze jedinečné objekty. Toto rozhraní sady je implementováno různými třídami jako HashSet, TreeSet, LinkedHashSet atd. Protože všechny podtřídy implementují sadu, můžeme vytvořit instanci objektu sady s kteroukoli z těchto tříd.
Například:
Set hs = new HashSet (); Set lhs = new LinkedHashSet (); Set ts = new TreeSet (); Where T is the type of the object. >
Níže jsou uvedeny třídy, které implementují rozhraní Set:
i). HashSet
Třída HashSet je vlastní implementací datové struktury hashovací tabulky. Objekty, které vkládáme do HashSet, nezaručují, že budou vloženy ve stejném pořadí. Objekty jsou vkládány na základě jejich hash kódu. Tato třída také umožňuje vkládání prvků NULL. Pojďme pochopit HashSet na příkladu:
Jáva
// Java program to demonstrate the> // working of a HashSet> import> java.util.*;> public> class> HashSetDemo {> >// Main Method> >public> static> void> main(String args[])> >{> >// Creating HashSet and> >// adding elements> >HashSet hs =>new> HashSet();> >hs.add(>'Geeks'>);> >hs.add(>'For'>);> >hs.add(>'Geeks'>);> >hs.add(>'Is'>);> >hs.add(>'Very helpful'>);> >// Traversing elements> >Iterator itr = hs.iterator();> >while> (itr.hasNext()) {> >System.out.println(itr.next());> >}> >}> }> |
>
>Výstup
Very helpful Geeks For Is>
ii). LinkedHashSet
LinkedHashSet je velmi podobný HashSet. Rozdíl je v tom, že k ukládání dat se používá dvojitě propojený seznam a zachovává se pořadí prvků.
Pojďme pochopit LinkedHashSet na příkladu:
Jáva
// Java program to demonstrate the> // working of a LinkedHashSet> import> java.util.*;> public> class> LinkedHashSetDemo {> >// Main Method> >public> static> void> main(String args[])> >{> >// Creating LinkedHashSet and> >// adding elements> >LinkedHashSet lhs> >=>new> LinkedHashSet();> >lhs.add(>'Geeks'>);> >lhs.add(>'For'>);> >lhs.add(>'Geeks'>);> >lhs.add(>'Is'>);> >lhs.add(>'Very helpful'>);> >// Traversing elements> >Iterator itr = lhs.iterator();> >while> (itr.hasNext()) {> >System.out.println(itr.next());> >}> >}> }> |
>
>Výstup
Geeks For Is Very helpful>
7. Rozhraní tříděné sady
Toto rozhraní je velmi podobné nastavenému rozhraní. Jediný rozdíl je v tom, že toto rozhraní má další metody, které udržují pořadí prvků. Rozhraní tříděné sady rozšiřuje rozhraní sady a používá se ke zpracování dat, která je třeba třídit. Třída, která implementuje toto rozhraní, je TreeSet. Protože tato třída implementuje SortedSet, můžeme vytvořit instanci objektu SortedSet s touto třídou.
Například:
SortedSet ts = new TreeSet (); Where T is the type of the object. >
Třída, která implementuje rozhraní tříděné sady, je TreeSet.
TreeSet
Třída TreeSet používá strom pro ukládání. Pořadí prvků je udržováno množinou využívající jejich přirozené řazení bez ohledu na to, zda je poskytnut explicitní komparátor. To musí být konzistentní s rovno, pokud má správně implementovat rozhraní Set. Lze jej také objednat pomocí komparátoru poskytnutého v nastaveném čase vytvoření v závislosti na použitém konstruktoru.
Pojďme si TreeSet porozumět na příkladu:
Jáva
// Java program to demonstrate the> // working of a TreeSet> import> java.util.*;> public> class> TreeSetDemo {> >// Main Method> >public> static> void> main(String args[])> >{> >// Creating TreeSet and> >// adding elements> >TreeSet ts =>new> TreeSet();> >ts.add(>'Geeks'>);> >ts.add(>'For'>);> >ts.add(>'Geeks'>);> >ts.add(>'Is'>);> >ts.add(>'Very helpful'>);> >// Traversing elements> >Iterator itr = ts.iterator();> >while> (itr.hasNext()) {> >System.out.println(itr.next());> >}> >}> }> |
>
>Výstup
For Geeks Is Very helpful>
8. Mapové rozhraní
Mapa je datová struktura, která podporuje pár klíč-hodnota pro mapování dat. Toto rozhraní nepodporuje duplicitní klíče, protože stejný klíč nemůže mít více mapování, umožňuje však duplicitní hodnoty v různých klíčích. Mapa je užitečná, pokud existují data a chceme provádět operace na základě klíče. Toto mapové rozhraní je implementováno různými třídami jako HashMap , Stromová mapa , atd. Protože všechny podtřídy implementují mapu, můžeme vytvořit instanci objektu mapy s kteroukoli z těchto tříd.
Například:
Map hm = new HashMap (); Map tm = new TreeMap (); Where T is the type of the object. >
Často používanou implementací rozhraní Map je HashMap.
HashMap
HashMap poskytuje základní implementaci rozhraní Map Java. Ukládá data v párech (klíč, hodnota). Abychom získali přístup k hodnotě v HashMap, musíme znát její klíč. HashMap používá techniku zvanou hashování. Hašování je technika převodu velkého řetězce na malý řetězec, který představuje stejný řetězec, takže operace indexování a vyhledávání jsou rychlejší. HashSet také používá HashMap interně.
Pojďme pochopit HashMap na příkladu:
Jáva
// Java program to demonstrate the> // working of a HashMap> import> java.util.*;> public> class> HashMapDemo {> >// Main Method> >public> static> void> main(String args[])> >{> >// Creating HashMap and> >// adding elements> >HashMap hm> >=>new> HashMap();> >hm.put(>1>,>'Geeks'>);> >hm.put(>2>,>'For'>);> >hm.put(>3>,>'Geeks'>);> >// Finding the value for a key> >System.out.println(>'Value for 1 is '> + hm.get(>1>));> >// Traversing through the HashMap> >for> (Map.Entry e : hm.entrySet())> >System.out.println(e.getKey() +> >+ e.getValue());> >}> }> |
>
>Výstup
Value for 1 is Geeks 1 Geeks 2 For 3 Geeks>