logo

Kolekcie v Jave

Akákoľvek skupina jednotlivých objektov, ktoré sú reprezentované ako jedna jednotka, sa nazýva Java Collection of Objects. V Jave je samostatný rámec s názvom Kolekčný rámec bol definovaný v JDK 1.2, ktorý obsahuje všetky triedy Java Collection Classes a rozhranie.

V jazyku Java, rozhranie kolekcie ( java.util.Collection ) a rozhranie mapy ( java.util.Map ) sú dve hlavné koreňové rozhrania tried kolekcií Java.

Čo by ste sa mali naučiť v kolekciách Java?

  • Rozhranie SortedSet
    • Rozhranie NavigableSet
    • TreeSet
    • Trieda ConcurrentSkipListSet
  • Rozhranie mapy
  • Ďalšie dôležité pojmy
    • Ako previesť HashMap na ArrayList
    • Náhodný výber položiek zo zoznamu
    • Ako pridať všetky položky z kolekcie do ArrayList
    • Konverzia Java máp na zoznam
    • Konverzia poľa na zoznam ArrayList
    • Konverzia ArrayList na Array
    • Rozdiely medzi Array a ArrayList



Čo je to rámec v jazyku Java?

Rámec je súbor tried a rozhraní, ktoré poskytujú hotovú architektúru. Na implementáciu novej funkcie alebo triedy nie je potrebné definovať rámec. Optimálny objektovo orientovaný dizajn však vždy zahŕňa rámec s kolekciou tried, takže všetky triedy vykonávajú rovnaký druh úlohy.

Potrebujete rámec pre samostatnú kolekciu v jazyku Java

Pred zavedením Collection Framework (alebo pred JDK 1.2) boli štandardné metódy na zoskupovanie objektov Java (alebo kolekcií) Polia alebo vektory , alebo Hashtables . Všetky tieto kolekcie nemali spoločné rozhranie. Preto, hoci hlavný cieľ všetkých kolekcií je rovnaký, implementácia všetkých týchto kolekcií bola definovaná nezávisle a nemala medzi nimi žiadnu koreláciu. A tiež je pre používateľov veľmi ťažké zapamätať si všetko odlišné metódy , syntax a konštruktérov prítomný v každej triede zbierky.
Pochopme to na príklade pridania prvku do hašovacej tabuľky a vektora.

abstraktná trieda v jazyku Java

Príklad:

Java




// 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ýkon

1 1 geeks>

Ako môžeme pozorovať, žiadna z týchto kolekcií (Array, Vector alebo Hashtable) neimplementuje štandardné rozhranie pre prístup členov, pre programátorov bolo veľmi ťažké napísať algoritmy, ktoré môžu fungovať pre všetky druhy kolekcií. Ďalšou nevýhodou je, že väčšina metód „Vector“ je konečná, čo znamená, že triedu „Vector“ nemôžeme rozšíriť na implementáciu podobného druhu kolekcie. Preto sa vývojári Java rozhodli prísť so spoločným rozhraním na riešenie vyššie uvedených problémov a predstavili Collection Framework v príspevku JDK 1.2, ktorý bol upravený tak, aby boli staršie vektory a hashtables v súlade s Collection Framework.

Výhody Java Collection Framework

Keďže chýbajúci rámec zberu viedol k vyššie uvedenému súboru nevýhod, nižšie sú výhody rámca zberu.

  1. Konzistentné API: API má základnú sadu rozhraní ako napr Zbierka , Set , Zoznam , alebo Mapa , všetky triedy (ArrayList, LinkedList, Vector, atď.), ktoré implementujú tieto rozhrania niektoré spoločný súbor metód.
  2. Znižuje námahu pri programovaní: Programátor sa nemusí starať o dizajn kolekcie, ale môže sa sústrediť na jej najlepšie využitie vo svojom programe. Preto bol úspešne implementovaný základný koncept objektovo orientovaného programovania (t.j.) abstrakcie.
  3. Zvyšuje rýchlosť a kvalitu programu: Zvyšuje výkon poskytovaním vysokovýkonných implementácií užitočných dátových štruktúr a algoritmov, pretože v tomto prípade programátor nemusí myslieť na najlepšiu implementáciu špecifickej dátovej štruktúry. Môže jednoducho použiť najlepšiu implementáciu na drastické zvýšenie výkonu svojho algoritmu/programu.

Hierarchia Collection Framework v Jave

Obslužný balík (java.util) obsahuje všetky triedy a rozhrania, ktoré vyžaduje framework kolekcie. Rámec kolekcie obsahuje rozhranie s názvom iterovateľné rozhranie, ktoré poskytuje iterátoru na iteráciu cez všetky kolekcie. Toto rozhranie je rozšírené o hlavné rozhranie kolekcie, ktoré funguje ako koreň kolekcie. Všetky kolekcie rozširujú toto rozhranie kolekcie, čím rozširujú vlastnosti iterátora a metódy tohto rozhrania. Nasledujúci obrázok ilustruje hierarchiu rámca kolekcie.

Predtým, ako pochopíme rôzne komponenty vo vyššie uvedenom rámci, najprv pochopme triedu a rozhranie.

  • Trieda : Trieda je užívateľsky definovaný plán alebo prototyp, z ktorého sa vytvárajú objekty. Predstavuje množinu vlastností alebo metód, ktoré sú spoločné pre všetky objekty jedného typu.
  • Rozhranie : Podobne ako trieda, aj rozhranie môže mať metódy a premenné, ale metódy deklarované v rozhraní sú štandardne abstraktné (iba podpis metódy, nikto). Rozhrania určujú, čo musí trieda robiť a nie ako. Je to plán triedy.

Metódy zberného rozhrania

Toto rozhranie obsahuje rôzne metódy, ktoré môžu priamo použiť všetky kolekcie implementujúce toto rozhranie. Oni sú:

Metóda

Popis

pridať (objekt) Táto metóda sa používa na pridanie objektu do kolekcie.
addAll(Kolekcia c) Táto metóda pridá do tejto kolekcie všetky prvky v danej kolekcii.
jasný() Táto metóda odstráni všetky prvky z tejto kolekcie.
obsahuje (Objekt o) Táto metóda vráti hodnotu true, ak kolekcia obsahuje zadaný prvok.
obsahuje všetko (kolekcia c) Táto metóda vráti hodnotu true, ak kolekcia obsahuje všetky prvky danej kolekcie.
rovná sa (Objekt o) Táto metóda porovnáva zadaný objekt s touto kolekciou kvôli rovnosti.
hashCode() Táto metóda sa používa na vrátenie hodnoty hash kódu pre túto kolekciu.
je prázdny() Táto metóda vráti hodnotu true, ak táto kolekcia neobsahuje žiadne prvky.
iterátor() Táto metóda vracia iterátor nad prvkami v tejto kolekcii.
max()
Táto metóda sa používa na vrátenie maximálnej hodnoty prítomnej v kolekcii.
parallelStream() Táto metóda vráti paralelný prúd s touto kolekciou ako zdrojom.
odstrániť (Objekt o) Táto metóda sa používa na odstránenie daného objektu z kolekcie. Ak existujú duplicitné hodnoty, potom táto metóda odstráni prvý výskyt objektu.
odstrániť všetko (kolekcia c) Táto metóda sa používa na odstránenie všetkých objektov uvedených v danej kolekcii z kolekcie.
removeIf (Filter predikátov) Táto metóda sa používa na odstránenie všetkých prvkov tejto kolekcie, ktoré spĺňajú dané predikát .
ponechať všetko (kolekcia c) Táto metóda sa používa na uchovanie iba prvkov v tejto kolekcii, ktoré sú obsiahnuté v zadanej kolekcii.
veľkosť () Táto metóda sa používa na vrátenie počtu prvkov v kolekcii.
rozdeľovač() Táto metóda sa používa na vytvorenie a Rozdeľovač nad prvkami v tejto kolekcii.
Prúd() Táto metóda sa používa na vrátenie sekvenčného streamu s touto kolekciou ako zdrojom.
toArray() Táto metóda sa používa na vrátenie poľa obsahujúceho všetky prvky v tejto kolekcii.

Rozhrania, ktoré rozširujú rozhranie Java Collections Interface

Rámec zberu obsahuje viacero rozhraní, kde sa každé rozhranie používa na ukladanie špecifického typu údajov. Nasledujú rozhrania prítomné v rámci.

1. Iterovateľné rozhranie

Toto je koreňové rozhranie pre celý rámec kolekcie. Rozhranie kolekcie rozširuje iterovateľné rozhranie. Preto zo svojej podstaty všetky rozhrania a triedy implementujú toto rozhranie. Hlavnou funkcionalitou tohto rozhrania je poskytnúť iterátor pre kolekcie. Preto toto rozhranie obsahuje iba jednu abstraktnú metódu, ktorou je iterátor. Vracia

Iterator iterator();>

2. Rozhranie kolekcie

Toto rozhranie rozširuje iterovateľné rozhranie a je implementované všetkými triedami v rámci kolekcie. Toto rozhranie obsahuje všetky základné metódy, ktoré má každá kolekcia, ako je pridávanie údajov do kolekcie, odstraňovanie údajov, vymazanie údajov atď. Všetky tieto metódy sú implementované v tomto rozhraní, pretože tieto metódy implementujú všetky triedy bez ohľadu na ich štýl implementácie. A tiež, že tieto metódy v tomto rozhraní zaisťujú, že názvy metód sú univerzálne pre všetky kolekcie. Preto v skratke môžeme povedať, že toto rozhranie stavia základ, na ktorom sú implementované triedy kolekcií.

3. Rozhranie zoznamu

Toto je podriadené rozhranie rozhrania kolekcie. Toto rozhranie je určené pre dáta typu zoznam, do ktorého môžeme uložiť všetky zoradené kolekcie objektov. To tiež umožňuje, aby v ňom boli prítomné duplicitné údaje. Toto rozhranie zoznamu je implementované rôznymi triedami ako ArrayList, Vector, Stack, atď. Keďže všetky podtriedy implementujú zoznam, môžeme vytvoriť inštanciu objektu zoznamu s ktoroukoľvek z týchto tried.

Napríklad:

List al = new ArrayList ();  List ll = new LinkedList ();  List v = new Vector ();  Where T is the type of the object>

Triedy, ktoré implementujú rozhranie List, sú nasledovné:

i). ArrayList

ArrayList nám poskytuje dynamické polia v jazyku Java. Aj keď môže byť pomalší ako štandardné polia, ale môže byť užitočný v programoch, kde je potrebné veľa manipulácie s poli. Veľkosť ArrayList sa automaticky zväčší, ak sa kolekcia zväčší alebo zmenší, ak sa objekty z kolekcie odstránia. Java ArrayList nám umožňuje náhodný prístup k zoznamu. ArrayList nemožno použiť pre obalová trieda pre takéto prípady.

Poďme pochopiť ArrayList s nasledujúcim príkladom:

Java




// 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ýkon

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

ii). LinkedList

Trieda LinkedList je implementáciou triedy Poďme pochopiť LinkedList s nasledujúcim príkladom:

Java




// 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ýkon

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

iii). Vektor

Vektor nám poskytuje dynamické polia v Jave. Aj keď môže byť pomalší ako štandardné polia, ale môže byť užitočný v programoch, kde je potrebné veľa manipulácie s poli. To je z hľadiska implementácie totožné s ArrayList. Primárny rozdiel medzi vektorom a ArrayList je však v tom, že Vector je synchronizovaný a ArrayList je nesynchronizovaný.

Poďme pochopiť vektor na príklade:

Java




// 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ýkon

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

iv). Stoh

Trieda zásobníkov modeluje a implementujelast-in-first-out. Okrem základných operácií push a pop poskytuje trieda ďalšie tri funkcie prázdne, vyhľadávanie a nahliadnutie. Trieda môže byť tiež označovaná ako podtrieda Vector.

Poďme pochopiť zásobník na príklade:

Java




// 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ýkon

Geeks For Geeks Geeks Geeks For Geeks>

Poznámka: Stack je podtrieda Vector a staršia trieda. Je bezpečný pre vlákna, čo môže byť nad hlavou v prostredí, kde bezpečnosť závitov nie je potrebná. Je možné použiť alternatívu k zásobníku ArrayDequeue ktorý nie je bezpečný pre vlákna a má rýchlejšiu implementáciu poľa.

4. Rozhranie fronty

Ako už názov napovedá, rozhranie frontu udržiava poradie FIFO (First In First Out) podobné riadku frontu v reálnom svete. Toto rozhranie je určené na ukladanie všetkých prvkov, kde záleží na poradí prvkov. Napríklad vždy, keď sa pokúšame rezervovať lístok, lístky sa predávajú podľa poradia príchodu. Lístok teda dostane ten, koho požiadavka dorazí ako prvá do poradia. Existujú rôzne triedy ako napr PriorityQueue , ArrayDeque , atď. Pretože všetky tieto podtriedy implementujú front, môžeme vytvoriť inštanciu objektu frontu s ktoroukoľvek z týchto tried.

Napríklad:

Queue pq = new PriorityQueue ();  Queue ad = new ArrayDeque ();  Where T is the type of the object.>

Najčastejšie používanou implementáciou rozhrania frontu je PriorityQueue.

Prioritný front

PriorityQueue sa používa, keď sa predpokladá, že objekty budú spracované na základe priority. Je známe, že front sa riadi algoritmom First-In-First-Out, ale niekedy je potrebné spracovať prvky frontu podľa priority av týchto prípadoch sa používa táto trieda. PriorityQueue je založený na prioritnej halde. Prvky prioritného radu sú zoradené podľa prirodzeného usporiadania alebo podľa a Porovnávač poskytované v čase zostavovania frontu v závislosti od použitého konštruktora.

Poďme pochopiť prioritný front na príklade:

Java




// 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ýkon

10 10 15>

5. A rozhranie

Toto je veľmi malá variácia Napríklad:

Deque ad = new ArrayDeque ();  Where T is the type of the object.>

Trieda, ktorá implementuje rozhranie deque, je ArrayDeque.

ArrayDeque

Trieda ArrayDeque, ktorá je implementovaná v rámci kolekcie, nám poskytuje spôsob, ako použiť pole s nastaviteľnou veľkosťou. Ide o špeciálny druh poľa, ktoré rastie a umožňuje používateľom pridať alebo odstrániť prvok z oboch strán frontu. Pole deque nemajú žiadne kapacitné obmedzenia a rastú podľa potreby na podporu používania.

Poďme pochopiť ArrayDeque na príklade:

Java




// 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ýkon

[10, 20, 30, 40, 50] [291, 564, 24, 14]>

6. Nastaviť rozhranie

Množina je neusporiadaná kolekcia objektov, do ktorej nemožno uložiť duplicitné hodnoty. Táto kolekcia sa používa, keď sa chceme vyhnúť duplicite objektov a chceme uchovávať iba jedinečné predmety. Toto rozhranie množiny je implementované rôznymi triedami ako HashSet, TreeSet, LinkedHashSet atď. Keďže množinu implementujú všetky podtriedy, môžeme vytvoriť inštanciu objektu množiny s ktoroukoľvek z týchto tried.

Napríklad:

Set hs = new HashSet ();  Set lhs = new LinkedHashSet ();  Set ts = new TreeSet ();  Where T is the type of the object.>

Nasledujú triedy, ktoré implementujú rozhranie Set:

i). HashSet

Trieda HashSet je prirodzenou implementáciou dátovej štruktúry hash tabuľky. Objekty, ktoré vložíme do HashSet, nezaručujú, že budú vložené v rovnakom poradí. Objekty sa vkladajú na základe ich hash kódu. Táto trieda umožňuje aj vkladanie prvkov NULL. Poďme pochopiť HashSet na príklade:

Java




// 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ýkon

Very helpful Geeks For Is>

ii). LinkedHashSet

LinkedHashSet je veľmi podobný HashSet. Rozdiel je v tom, že na ukladanie údajov sa používa dvojito prepojený zoznam a zachováva sa poradie prvkov.

Poďme pochopiť LinkedHashSet na príklade:

Java




// 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ýkon

Geeks For Is Very helpful>

7. Rozhranie triedenej sady

Toto rozhranie je veľmi podobné nastavenému rozhraniu. Jediný rozdiel je v tom, že toto rozhranie má ďalšie metódy, ktoré zachovávajú poradie prvkov. Rozhranie triedenej sady rozširuje rozhranie sady a používa sa na spracovanie údajov, ktoré je potrebné triediť. Trieda, ktorá implementuje toto rozhranie, je TreeSet. Keďže táto trieda implementuje SortedSet, môžeme vytvoriť inštanciu objektu SortedSet s touto triedou.

Napríklad:

SortedSet ts = new TreeSet ();  Where T is the type of the object.>

Trieda, ktorá implementuje rozhranie triedenej množiny, je TreeSet.

TreeSet

Trieda TreeSet používa strom na ukladanie. Poradie prvkov je udržiavané množinou pomocou ich prirodzeného poradia bez ohľadu na to, či je alebo nie je poskytnutý explicitný komparátor. Toto musí byť v súlade s rovnakým, ak má správne implementovať rozhranie Set. Dá sa objednať aj komparátorom poskytnutým v nastavenom čase vytvorenia v závislosti od použitého konštruktora.

Poďme pochopiť TreeSet na príklade:

Java




// 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ýkon

For Geeks Is Very helpful>

8. Rozhranie mapy

Mapa je dátová štruktúra, ktorá podporuje pár kľúč – hodnota na mapovanie údajov. Toto rozhranie nepodporuje duplicitné kľúče, pretože rovnaký kľúč nemôže mať viacero mapovaní, umožňuje však duplicitné hodnoty v rôznych kľúčoch. Mapa je užitočná, ak existujú údaje a chceme vykonávať operácie na základe kľúča. Toto mapové rozhranie je implementované rôznymi triedami ako napr HashMap , Stromová mapa , atď. Keďže všetky podtriedy implementujú mapu, môžeme vytvoriť inštanciu objektu mapy s ktoroukoľvek z týchto tried.

Napríklad:

Map hm = new HashMap ();  Map tm = new TreeMap ();   Where T is the type of the object.>

Často používanou implementáciou rozhrania mapy je HashMap.

HashMap

HashMap poskytuje základnú implementáciu mapového rozhrania Java. Údaje ukladá v pároch (kľúč, hodnota). Aby sme mali prístup k hodnote v HashMape, musíme poznať jej kľúč. HashMap využíva techniku ​​nazývanú hashovanie. Hašovanie je technika konverzie veľkého reťazca na malý reťazec, ktorý predstavuje rovnaký reťazec, takže operácie indexovania a vyhľadávania sú rýchlejšie. HashSet tiež používa HashMap interne.

Poďme pochopiť HashMap na príklade:

Java




// 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ýkon

Value for 1 is Geeks 1 Geeks 2 For 3 Geeks>