Varje grupp av individuella objekt som representeras som en enda enhet kallas en Java Collection of Objects. I Java, ett separat ramverk som heter Insamlingsram har definierats i JDK 1.2 som innehåller alla Java Collection-klasser och gränssnitt.
I Java, samlingsgränssnittet ( java.util.Collection ) och kartgränssnitt ( java.util.Map ) är de två huvudsakliga rotgränssnitten för Java-samlingsklasser.
Vad du bör lära dig i Java-samlingar?
- Listgränssnitt
- Abstrakt lista klass
- Abstrakt sekventiell listaklass
- Arraylista
- Vektor klass
- Stackklass
- LinkedList-klass
- Kögränssnitt
- Blockerande kögränssnitt
- Abstrakt köklass
- PriorityQueue Class
- PriorityBlockingQueue Class
- ConcurrentLinkedQueue Class
- ArrayBlockingQueue Class
- DelayQueue Class
- LinkedBlockingQueue Class
- LinkedTransferQueue
- Och gränssnittet
- BlockingDeque-gränssnitt
- ConcurrentLinkedDeque-klass
- ArrayDeque-klass
- Ställ in gränssnitt
- Abstrakt uppsättning klass
- CopyOnWriteArraySet Class
- EnumSet Class
- ConcurrentHashMap Class
- HashSet-klass
- LinkedHashSet Class
- SortedSet Interface
- NavigableSet-gränssnitt
- Träduppsättning
- ConcurrentSkipListSet Class
- Kartgränssnitt
- SortedMap Interface
- NavigableMap-gränssnitt
- ConcurrentMap-gränssnitt
- TreeMap-klass
- Abstrakt kartklass
- ConcurrentHashMap Class
- EnumMap-klass
- HashMap-klass
- IdentityHashMap Class
- LinkedHashMap Class
- HashTable-klass
- Fastighetsklass
- Andra viktiga begrepp
- Hur man konverterar HashMap till ArrayList
- Välj slumpmässigt objekt från en lista
- Hur man lägger till alla objekt från en samling till en ArrayList
- Konvertering av Java Maps till List
- Konvertering av array till ArrayList
- Konvertering från ArrayList till Array
- Skillnader mellan Array och ArrayList
Vad är ett ramverk i Java?
Ett ramverk är en uppsättning klasser och gränssnitt som ger en färdig arkitektur. För att implementera en ny funktion eller en klass, finns det inget behov av att definiera ett ramverk. En optimal objektorienterad design inkluderar dock alltid ett ramverk med en samling klasser så att alla klasser utför samma typ av uppgift.
Behov av ett separat samlingsramverk i Java
Innan Collection Framework (eller innan JDK 1.2) introducerades var standardmetoderna för att gruppera Java-objekt (eller samlingar) Matriser eller Vektorer , eller Hashtables . Alla dessa samlingar hade inget gemensamt gränssnitt. Därför, även om huvudsyftet med alla samlingar är detsamma, definierades implementeringen av alla dessa samlingar oberoende och hade ingen korrelation mellan dem. Och dessutom är det väldigt svårt för användarna att komma ihåg alla de olika metoder , syntax och konstruktörer finns i varje samlingsklass.
Låt oss förstå detta med ett exempel på att lägga till ett element i en hashtabell och en vektor.
testning och typer av testning
Exempel:
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()> > }> }> |
>
>Produktion
1 1 geeks>
Som vi kan observera implementerar ingen av dessa samlingar (Array, Vector eller Hashtable) ett standardgränssnitt för medlemsåtkomst, det var mycket svårt för programmerare att skriva algoritmer som kan fungera för alla typer av samlingar. En annan nackdel är att de flesta 'Vector'-metoderna är slutgiltiga, vilket innebär att vi inte kan utöka klassen 'Vector' för att implementera en liknande typ av samling. Därför bestämde sig Java-utvecklare för att ta fram ett gemensamt gränssnitt för att hantera de ovan nämnda problemen och introducerade Collection Framework i JDK 1.2-posten som både äldre vektorer och hashtabeller modifierades för att överensstämma med Collection Framework.
Fördelar med Java Collection Framework
Eftersom avsaknaden av en insamlingsram gav upphov till ovanstående uppsättning av nackdelar, är följande fördelar med insamlingsramen.
- Konsekvent API: API har en grundläggande uppsättning gränssnitt som Samling , Uppsättning , Lista , eller Karta , alla klasser (ArrayList, LinkedList, Vector, etc) som implementerar dessa gränssnitt har några gemensamma metoder.
- Minskar programmeringsansträngning: En programmerare behöver inte oroa sig för utformningen av samlingen utan han kan snarare fokusera på dess bästa användning i sitt program. Därför har det grundläggande konceptet för objektorienterad programmering (dvs.) abstraktion implementerats framgångsrikt.
- Ökar programhastighet och kvalitet: Ökar prestanda genom att tillhandahålla högpresterande implementeringar av användbara datastrukturer och algoritmer eftersom programmeraren i det här fallet inte behöver tänka på den bästa implementeringen av en specifik datastruktur. Han kan helt enkelt använda den bästa implementeringen för att drastiskt öka prestandan för sin algoritm/program.
Hierarki för samlingsramverket i Java
Verktygspaketet (java.util) innehåller alla klasser och gränssnitt som krävs av samlingsramverket. Samlingsramverket innehåller ett gränssnitt som heter ett iterabelt gränssnitt som ger iteratorn att iterera genom alla samlingarna. Detta gränssnitt utökas med huvudinsamlingsgränssnittet som fungerar som en rot för samlingsramverket. Alla samlingar utökar detta samlingsgränssnitt och utökar därmed egenskaperna för iteratorn och metoderna för detta gränssnitt. Följande figur illustrerar hierarkin i samlingsramverket.
Innan vi förstår de olika komponenterna i ramverket ovan, låt oss först förstå en klass och ett gränssnitt.
- Klass : En klass är en användardefinierad ritning eller prototyp från vilken objekt skapas. Den representerar uppsättningen egenskaper eller metoder som är gemensamma för alla objekt av en typ.
- Gränssnitt : Liksom en klass kan ett gränssnitt ha metoder och variabler, men metoderna som deklareras i ett gränssnitt är som standard abstrakta (endast metodsignatur, ingen). Gränssnitt anger vad en klass måste göra och inte hur. Det är klassens ritning.
Metoder för insamlingsgränssnittet
Detta gränssnitt innehåller olika metoder som direkt kan användas av alla samlingar som implementerar detta gränssnitt. Dom är:
Metod | Beskrivning |
---|---|
add(Objekt) | Denna metod används för att lägga till ett objekt i samlingen. |
addAll(Samling c) | Denna metod lägger till alla element i den givna samlingen till denna samling. |
klar() | Den här metoden tar bort alla element från den här samlingen. |
innehåller(Objekt o) | Denna metod returnerar true om samlingen innehåller det angivna elementet. |
innehåller alla (samling c) | Denna metod returnerar true om samlingen innehåller alla element i den givna samlingen. |
lika(Objekt o) | Denna metod jämför det angivna objektet med denna samling för jämlikhet. |
hash-kod() | Den här metoden används för att returnera hashkodvärdet för denna samling. |
är tom() | Denna metod returnerar true om den här samlingen inte innehåller några element. |
iterator() | Denna metod returnerar en iterator över elementen i den här samlingen. |
max() | Denna metod används för att returnera det maximala värdet som finns i samlingen. |
parallellStream() | Denna metod returnerar en parallell ström med den här samlingen som källa. |
ta bort(Objekt o) | Denna metod används för att ta bort det givna objektet från samlingen. Om det finns dubbletter av värden tar den här metoden bort den första förekomsten av objektet. |
removeAll(Collection c) | Denna metod används för att ta bort alla objekt som nämns i den givna samlingen från samlingen. |
removeIf(Predikatfilter) | Denna metod används för att ta bort alla delar av denna samling som uppfyller det givna predikat . |
retainAll(Samling c) | Den här metoden används för att bara behålla de element i den här samlingen som finns i den angivna samlingen. |
storlek() | Denna metod används för att returnera antalet element i samlingen. |
spliterator() | Denna metod används för att skapa en Spliterator över elementen i denna samling. |
ström() | Denna metod används för att returnera en sekventiell ström med denna samling som källa. |
toArray() | Denna metod används för att returnera en array som innehåller alla element i den här samlingen. |
Gränssnitt som utökar Java Collections Interface
Insamlingsramverket innehåller flera gränssnitt där varje gränssnitt används för att lagra en specifik typ av data. Följande är de gränssnitt som finns i ramverket.
1. Iterable gränssnitt
Detta är rotgränssnittet för hela samlingsramverket. Samlingsgränssnittet utökar det itererbara gränssnittet. Därför implementerar alla gränssnitt och klasser detta gränssnitt. Huvudfunktionen i detta gränssnitt är att tillhandahålla en iterator för samlingarna. Därför innehåller detta gränssnitt endast en abstrakt metod som är iteratorn. Den returnerar
Iterator iterator();>
2. Insamlingsgränssnitt
Detta gränssnitt utökar det itererbara gränssnittet och implementeras av alla klasser i samlingsramverket. Detta gränssnitt innehåller alla grundläggande metoder som varje samling har som att lägga till data i samlingen, ta bort data, rensa data, etc. Alla dessa metoder är implementerade i detta gränssnitt eftersom dessa metoder implementeras av alla klasser oavsett stil. genomförandet. Och att ha dessa metoder i det här gränssnittet säkerställer också att namnen på metoderna är universella för alla samlingar. Därför kan vi kortfattat säga att detta gränssnitt bygger en grund på vilken samlingsklasserna implementeras.
3. Listgränssnitt
Detta är ett underordnat gränssnitt till samlingsgränssnittet. Detta gränssnitt är tillägnat data av listtypen där vi kan lagra alla ordnade samlingar av objekten. Detta tillåter också att duplicerade data finns i den. Detta listgränssnitt implementeras av olika klasser som ArrayList, Vector, Stack, etc. Eftersom alla underklasser implementerar listan kan vi instansiera ett listobjekt med vilken som helst av dessa klasser.
Till exempel:
List al = new ArrayList (); List ll = new LinkedList (); List v = new Vector (); Where T is the type of the object>
Klasserna som implementerar List-gränssnittet är följande:
i). ArrayList
ArrayList ger oss dynamiska arrayer i Java. Det kan dock vara långsammare än vanliga arrayer men kan vara till hjälp i program där mycket manipulation i arrayen behövs. Storleken på en ArrayList ökas automatiskt om samlingen växer eller krymper om objekten tas bort från samlingen. Java ArrayList låter oss komma åt listan slumpmässigt. ArrayList kan inte användas för omslagsklass för sådana fall.
Låt oss förstå ArrayList med följande exempel:
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) + ' '); } }> |
>
>Produktion
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
ii). Länkad lista
Klassen LinkedList är en implementering av Låt oss förstå LinkedList med följande exempel:
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) + ' '); } }> |
>
>Produktion
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
iii). Vektor
En vektor förser oss med dynamiska arrayer i Java. Det kan dock vara långsammare än vanliga arrayer men kan vara till hjälp i program där mycket manipulation i arrayen behövs. Detta är identiskt med ArrayList när det gäller implementering. Den primära skillnaden mellan en vektor och en ArrayList är dock att en Vector är synkroniserad och en ArrayList är osynkroniserad.
Låt oss förstå vektorn med ett exempel:
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) + ' '); } }> |
>
>Produktion
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
iv). Stack
Stapla klassmodeller och implementerarsist in först ut. Utöver de grundläggande push- och popoperationerna har klassen ytterligare tre funktioner för att tömma, söka och titta. Klassen kan också hänvisas till som underklassen till Vector.
Låt oss förstå stacken med ett exempel:
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() +> ' '> );> > }> > }> }> |
>
>Produktion
Geeks For Geeks Geeks Geeks For Geeks>
Notera: Stack är en underklass till Vector och en äldre klass. Den är gängsäker som kan vara över huvudet i en miljö där gängsäkerhet inte behövs. Ett alternativ till Stack är att använda ArrayDequeue som inte är trådsäker och har snabbare arrayimplementering.
4. Kögränssnitt
Som namnet antyder upprätthåller ett kögränssnitt ordningen FIFO (First In First Out) som liknar en verklig kölinje. Detta gränssnitt är dedikerat till att lagra alla element där ordningen på elementen spelar roll. Till exempel, när vi försöker boka en biljett säljs biljetterna enligt först till kvarn-principen. Därför får den vars förfrågan kommer först in i kön biljetten. Det finns olika klasser som Prioritetskö , ArrayDeque , etc. Eftersom alla dessa underklasser implementerar kön kan vi instansiera ett köobjekt med vilken som helst av dessa klasser.
Till exempel:
Queue pq = new PriorityQueue (); Queue ad = new ArrayDeque (); Where T is the type of the object.>
Den mest använda implementeringen av kögränssnittet är PriorityQueue.
Prioriterad kö
En PriorityQueue används när objekten ska bearbetas baserat på prioritet. Det är känt att en kö följer First-In-First-Out-algoritmen, men ibland behövs köns element bearbetas enligt prioritet och denna klass används i dessa fall. PriorityQueue är baserad på prioritetshögen. Elementen i prioritetskön är ordnade enligt den naturliga ordningen, eller av en Komparator tillhandahålls vid köbyggnadstid, beroende på vilken konstruktör som används.
Låt oss förstå prioritetskön med ett exempel:
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());> > }> }> |
>
>Produktion
10 10 15>
5. Och gränssnittet
Detta är en mycket liten variation av Till exempel:
Deque ad = new ArrayDeque (); Where T is the type of the object.>
Klassen som implementerar deque-gränssnittet är ArrayDeque.
ArrayDeque
ArrayDeque-klassen som är implementerad i samlingsramverket ger oss ett sätt att tillämpa storleksändringsbar array. Detta är en speciell typ av array som växer och låter användare lägga till eller ta bort ett element från båda sidor av kön. Array-deques har inga kapacitetsbegränsningar och de växer efter behov för att stödja användningen.
Låt oss förstå ArrayDeque med ett exempel:
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);> > }> }> |
>
>Produktion
[10, 20, 30, 40, 50] [291, 564, 24, 14]>
6. Ställ in gränssnitt
En uppsättning är en oordnad samling objekt där dubbla värden inte kan lagras. Denna samling används när vi vill undvika dubblering av objekten och bara vill lagra de unika objekten. Detta set-gränssnitt implementeras av olika klasser som HashSet, TreeSet, LinkedHashSet, etc. Eftersom alla underklasser implementerar setet kan vi instansiera ett set-objekt med vilken som helst av dessa klasser.
Till exempel:
Set hs = new HashSet (); Set lhs = new LinkedHashSet (); Set ts = new TreeSet (); Where T is the type of the object.>
Följande är klasserna som implementerar Set-gränssnittet:
i). HashSet
Klassen HashSet är en inneboende implementering av hashtabellens datastruktur. Objekten som vi infogar i HashSet garanterar inte att de infogas i samma ordning. Objekten infogas baserat på deras hashkod. Denna klass tillåter även infogning av NULL-element. Låt oss förstå HashSet med ett exempel:
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());> > }> > }> }> |
>
>Produktion
Very helpful Geeks For Is>
ii). LinkedHashSet
En LinkedHashSet är mycket lik en HashSet. Skillnaden är att detta använder en dubbellänkad lista för att lagra data och behåller ordningen på elementen.
Låt oss förstå LinkedHashSet med ett exempel:
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());> > }> > }> }> |
>
>Produktion
Geeks For Is Very helpful>
7. Gränssnitt för sorterad uppsättning
Detta gränssnitt är mycket likt det inställda gränssnittet. Den enda skillnaden är att detta gränssnitt har extra metoder som upprätthåller ordningen på elementen. Det sorterade set-gränssnittet utökar set-gränssnittet och används för att hantera de data som behöver sorteras. Klassen som implementerar detta gränssnitt är TreeSet. Eftersom den här klassen implementerar SortedSet, kan vi instansiera ett SortedSet-objekt med den här klassen.
Till exempel:
SortedSet ts = new TreeSet (); Where T is the type of the object.>
Klassen som implementerar det sorterade uppsättningsgränssnittet är TreeSet.
Träduppsättning
Klassen TreeSet använder ett träd för lagring. Ordningen av elementen upprätthålls av en uppsättning som använder deras naturliga ordning oavsett om en explicit komparator tillhandahålls eller inte. Detta måste överensstämma med lika om det ska kunna implementera Set-gränssnittet korrekt. Den kan också beställas av en komparator som tillhandahålls vid en bestämd tidpunkt för skapande, beroende på vilken konstruktor som används.
Låt oss förstå TreeSet med ett exempel:
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());> > }> > }> }> |
>
>Produktion
For Geeks Is Very helpful>
8. Kartgränssnitt
En karta är en datastruktur som stöder nyckel-värdeparet för kartläggning av data. Det här gränssnittet stöder inte dubbletter av nycklar eftersom samma nyckel inte kan ha flera mappningar, men det tillåter dubbletter av värden i olika nycklar. En karta är användbar om det finns data och vi vill utföra operationer utifrån nyckeln. Detta kartgränssnitt implementeras av olika klasser som HashMap , Trädkarta , etc. Eftersom alla underklasser implementerar kartan kan vi instansiera ett kartobjekt med vilken som helst av dessa klasser.
Till exempel:
Map hm = new HashMap (); Map tm = new TreeMap (); Where T is the type of the object.>
Den ofta använda implementeringen av ett kartgränssnitt är en HashMap.
HashMap
HashMap tillhandahåller den grundläggande implementeringen av kartgränssnittet för Java. Den lagrar data i (nyckel, värde) par. För att komma åt ett värde i en HashMap måste vi känna till dess nyckel. HashMap använder en teknik som kallas Hashing. Hashing är en teknik för att konvertera en stor sträng till en liten sträng som representerar samma sträng så att indexeringen och sökoperationerna går snabbare. HashSet använder också HashMap internt.
Låt oss förstå HashMap med ett exempel:
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());> > }> }> |
>
>Produktion
Value for 1 is Geeks 1 Geeks 2 For 3 Geeks>