logo

Samlinger i Java

Enhver gruppe af individuelle objekter, der er repræsenteret som en enkelt enhed, er kendt som en Java-samling af objekter. I Java, en separat ramme kaldet Indsamlingsramme er blevet defineret i JDK 1.2, som indeholder alle Java Collection Classes og Interface i den.

I Java er samlingsgrænsefladen ( java.util.Collection ) og kortgrænseflade ( java.util.Map ) er de to vigtigste rodgrænseflader i Java-samlingsklasser.

Hvad du bør lære i Java-samlinger?

  • Listegrænseflade
  • Køgrænseflade
    • Blokering af køgrænseflade
    • Abstrakt Kø klasse
    • Priority Queue Class
    • PriorityBlockingQueue Class
    • ConcurrentLinkedQueue-klasse
    • ArrayBlockingQueue Class
    • DelayQueue klasse
    • LinkedBlockingQueue Class
    • LinkedTransferQueue
  • Og grænsefladen
    • BlockingDeque Interface
    • ConcurrentLinkedDeque-klasse
    • ArrayDeque klasse
  • Indstil grænseflade
    • Abstrakt sæt klasse
    • CopyOnWriteArraySet Class
    • EnumSet klasse
    • ConcurrentHashMap-klasse
    • HashSet klasse
    • LinkedHashSet klasse
  • SortedSet Interface
    • NavigableSet Interface
    • Træsæt
    • ConcurrentSkipListSet Class
  • Kortgrænseflade
    • SortedMap Interface
    • NavigableMap Interface
    • ConcurrentMap Interface
    • TreeMap klasse
    • Abstrakt kort klasse
    • ConcurrentHashMap-klasse
    • EnumMap klasse
    • HashMap klasse
    • IdentityHashMap Class
    • LinkedHashMap klasse
    • HashTable-klasse
    • Ejendomsklasse
  • Andre vigtige begreber
    • Sådan konverteres HashMap til ArrayList
    • Vælg tilfældigt elementer fra en liste
    • Sådan tilføjer du alle elementer fra en samling til en ArrayList
    • Konvertering af Java Maps til List
    • Konvertering af array til ArrayList
    • Konvertering fra ArrayList til Array
    • Forskelle mellem Array og ArrayList



Hvad er et rammeværk i Java?

Et framework er et sæt klasser og grænseflader, som giver en færdigbygget arkitektur. For at implementere en ny funktion eller en klasse er der ikke behov for at definere en ramme. Et optimalt objektorienteret design inkluderer dog altid en ramme med en samling af klasser, således at alle klasserne udfører den samme slags opgave.

Behov for en Separat Collection Framework i Java

Før Collection Framework (eller før JDK 1.2) blev introduceret, var standardmetoderne til gruppering af Java-objekter (eller samlinger) Arrays eller Vektorer , eller Hashtables . Alle disse samlinger havde ingen fælles grænseflade. Derfor, selvom hovedformålet med alle samlingerne er det samme, blev implementeringen af ​​alle disse samlinger defineret uafhængigt og havde ingen sammenhæng mellem dem. Og det er også meget svært for brugerne at huske alle de forskellige metoder , syntaks og konstruktører til stede i hver indsamlingsklasse.
Lad os forstå dette med et eksempel på tilføjelse af et element i en hashtabel og en vektor.

kunstigt neurale netværk

Eksempel:

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 observere, implementerer ingen af ​​disse samlinger (Array, Vector eller Hashtable) en standard medlemsadgangsgrænseflade, det var meget svært for programmører at skrive algoritmer, der kan fungere til alle slags samlinger. En anden ulempe er, at de fleste af 'Vector'-metoderne er endelige, hvilket betyder, at vi ikke kan udvide 'Vector'-klassen til at implementere en lignende form for samling. Derfor besluttede Java-udviklere at komme op med en fælles grænseflade til at håndtere de ovennævnte problemer og introducerede Collection Framework i JDK 1.2 post, som både legacy Vectors og Hashtables blev modificeret til at passe til Collection Framework.

Fordele ved Java Collection Framework

Da manglen på en indsamlingsramme gav anledning til ovenstående sæt af ulemper, er følgende fordele ved indsamlingsrammen.

  1. Konsekvent API: API'en har et grundlæggende sæt grænseflader som f.eks Kollektion , Sæt , Liste , eller Kort , har alle klasser (ArrayList, LinkedList, Vector osv.), der implementerer disse grænseflader nogle fælles sæt metoder.
  2. Reducerer programmeringsindsats: En programmør behøver ikke at bekymre sig om designet af samlingen, men han kan snarere fokusere på dens bedste brug i sit program. Derfor er det grundlæggende koncept for objektorienteret programmering (dvs.) abstraktion blevet implementeret med succes.
  3. Øger programhastighed og kvalitet: Øger ydeevnen ved at levere højtydende implementeringer af nyttige datastrukturer og algoritmer, fordi programmøren i dette tilfælde ikke behøver at tænke på den bedste implementering af en specifik datastruktur. Han kan simpelthen bruge den bedste implementering til drastisk at booste ydeevnen af ​​sin algoritme/program.

Hierarki af samlingsrammen i Java

Hjælpepakken, (java.util) indeholder alle de klasser og grænseflader, der kræves af samlingsrammerne. Samlingsrammen indeholder en grænseflade kaldet en iterabel grænseflade, som giver iteratoren mulighed for at iterere gennem alle samlingerne. Denne grænseflade er udvidet med hovedindsamlingsgrænsefladen, der fungerer som rod til samlingsrammerne. Alle samlingerne udvider denne samlingsgrænseflade og udvider derved egenskaberne for iteratoren og metoderne for denne grænseflade. Følgende figur illustrerer hierarkiet af indsamlingsrammen.

Før vi forstår de forskellige komponenter i ovenstående ramme, lad os først forstå en klasse og en grænseflade.

  • klasse : En klasse er en brugerdefineret blueprint eller prototype, hvorfra objekter oprettes. Det repræsenterer det sæt af egenskaber eller metoder, der er fælles for alle objekter af én type.
  • Interface : Ligesom en klasse kan en grænseflade have metoder og variabler, men de metoder, der er erklæret i en grænseflade, er som standard abstrakte (kun metodesignatur, ingen). Interfaces specificerer, hvad en klasse skal gøre og ikke hvordan. Det er klassens blueprint.

Metoder til indsamlingsgrænsefladen

Denne grænseflade indeholder forskellige metoder, som kan bruges direkte af alle de samlinger, der implementerer denne grænseflade. De er:

Metode

Beskrivelse

tilføje (objekt) Denne metode bruges til at tilføje et objekt til samlingen.
addAll(Samling c) Denne metode tilføjer alle elementerne i den givne samling til denne samling.
klar() Denne metode fjerner alle elementer fra denne samling.
indeholder (Objekt o) Denne metode returnerer sand, hvis samlingen indeholder det angivne element.
indeholder Alle (Samling c) Denne metode returnerer sand, hvis samlingen indeholder alle elementerne i den givne samling.
er lig med (Objekt o) Denne metode sammenligner det angivne objekt med denne samling for lighed.
hashCode() Denne metode bruges til at returnere hashkodeværdien for denne samling.
er tom() Denne metode returnerer sand, hvis denne samling ikke indeholder nogen elementer.
iterator() Denne metode returnerer en iterator over elementerne i denne samling.
max()
Denne metode bruges til at returnere den maksimale værdi, der er til stede i samlingen.
parallelStream() Denne metode returnerer en parallel Stream med denne samling som sin kilde.
fjern (Objekt o) Denne metode bruges til at fjerne det givne objekt fra samlingen. Hvis der er dublerede værdier, fjerner denne metode den første forekomst af objektet.
removeAll(Samling c) Denne metode bruges til at fjerne alle de nævnte objekter i den givne samling fra samlingen.
removeIf(prædikatfilter) Denne metode bruges til at fjerne alle de elementer i denne samling, der opfylder det givne prædikat .
retainAll(Samling c) Denne metode bruges til kun at beholde de elementer i denne samling, der er indeholdt i den angivne samling.
størrelse() Denne metode bruges til at returnere antallet af elementer i samlingen.
splitter() Denne metode bruges til at skabe en Spliterator over elementerne i denne samling.
strøm() Denne metode bruges til at returnere en sekventiel stream med denne samling som kilde.
toArray() Denne metode bruges til at returnere et array, der indeholder alle elementerne i denne samling.

Grænseflader, der udvider Java Collections-grænsefladen

Indsamlingsrammen indeholder flere grænseflader, hvor hver grænseflade bruges til at lagre en bestemt type data. Følgende er de grænseflader, der er til stede i rammen.

1. Iterable grænseflade

Dette er rodgrænsefladen for hele samlingsrammen. Samlingsgrænsefladen udvider den iterable grænseflade. Derfor implementerer alle grænseflader og klasser denne grænseflade. Hovedfunktionaliteten af ​​denne grænseflade er at give en iterator til samlingerne. Derfor indeholder denne grænseflade kun én abstrakt metode, som er iteratoren. Det returnerer

Iterator iterator();>

2. Samling grænseflade

Denne grænseflade udvider den iterable grænseflade og implementeres af alle klasserne i samlingsrammerne. Denne grænseflade indeholder alle de grundlæggende metoder, som hver samling har, såsom at tilføje data til samlingen, fjerne data, rydde data osv. Alle disse metoder er implementeret i denne grænseflade, fordi disse metoder implementeres af alle klasserne uanset deres stil af implementering. Og også, at have disse metoder i denne grænseflade sikrer, at navnene på metoderne er universelle for alle samlingerne. Derfor kan vi kort sagt sige, at denne grænseflade bygger et fundament, som samlingsklasserne er implementeret på.

3. Listegrænseflade

Dette er en underordnet grænseflade til samlingsgrænsefladen. Denne grænseflade er dedikeret til data af listetypen, hvor vi kan gemme alle de ordnede samlinger af objekterne. Dette tillader også, at duplikerede data er til stede i den. Denne listegrænseflade er implementeret af forskellige klasser som ArrayList, Vector, Stack osv. Da alle underklasserne implementerer listen, kan vi instansiere et listeobjekt med enhver af disse klasser.

For eksempel:

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

Klasserne, der implementerer List-grænsefladen, er som følger:

jeg). ArrayList

ArrayList giver os dynamiske arrays i Java. Det kan dog være langsommere end standard arrays, men det kan være nyttigt i programmer, hvor der er behov for masser af manipulation i arrayet. Størrelsen af ​​en ArrayList øges automatisk, hvis samlingen vokser eller krymper, hvis objekterne fjernes fra samlingen. Java ArrayList giver os mulighed for tilfældigt at få adgang til listen. ArrayList kan ikke bruges til indpakningsklasse for sådanne tilfælde.

Lad os forstå ArrayList med følgende eksempel:

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

LinkedList-klassen er en implementering af Lad os forstå LinkedList med følgende eksempel:

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 giver os dynamiske arrays i Java. Det kan dog være langsommere end standard arrays, men det kan være nyttigt i programmer, hvor der er behov for masser af manipulation i arrayet. Dette er identisk med ArrayList med hensyn til implementering. Den primære forskel mellem en vektor og en ArrayList er dog, at en Vector er synkroniseret, og en ArrayList er ikke-synkroniseret.

Lad os forstå vektoren med et eksempel:

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

Stak klassemodeller og implementerersidst-ind-først-ud. Ud over de grundlæggende push- og pop-operationer giver klassen yderligere tre funktioner, tøm, søg og kig. Klassen kan også omtales som underklassen af ​​Vector.

Lad os forstå stakken med et eksempel:

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>

Bemærk: Stack er en underklasse af Vector og en ældre klasse. Det er gevindsikkert, hvilket kan være overhead i et miljø, hvor gevindsikkerhed ikke er nødvendig. En alternativ til Stack er at bruge ArrayDequeue som ikke er trådsikker og har hurtigere arrayimplementering.

4. Køgrænseflade

Som navnet antyder, opretholder en køgrænseflade FIFO-rækkefølgen (First In First Out) svarende til en kølinje i den virkelige verden. Denne grænseflade er dedikeret til at gemme alle de elementer, hvor rækkefølgen af ​​elementerne betyder noget. For eksempel, når vi forsøger at bestille en billet, sælges billetterne efter først til mølle-princippet. Derfor får den person, hvis anmodning kommer først i køen, billetten. Der er forskellige klasser som f.eks Prioritetskø , ArrayDeque , osv. Da alle disse underklasser implementerer køen, kan vi instansiere et køobjekt med enhver af disse klasser.

For eksempel:

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

Den mest anvendte implementering af køgrænsefladen er PriorityQueue.

Prioritetskø

En PriorityQueue bruges, når objekterne formodes at blive behandlet baseret på prioritet. Det er kendt, at en kø følger First-In-First-Out-algoritmen, men nogle gange skal elementerne i køen behandles i henhold til prioritet, og denne klasse bruges i disse tilfælde. PriorityQueue er baseret på prioritetsbunken. Elementerne i prioritetskøen er ordnet efter den naturlige rækkefølge, eller efter en Komparator ydes ved kø byggetid, afhængig af hvilken konstruktør der benyttes.

Lad os forstå prioritetskøen med et eksempel:

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. Og grænsefladen

Dette er en meget lille variation af For eksempel:

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

Klassen, der implementerer deque-grænsefladen, er ArrayDeque.

ArrayDeque

ArrayDeque-klassen, som er implementeret i samlingsrammen, giver os en måde at anvende array, der kan ændres størrelse. Dette er en speciel slags array, der vokser og giver brugerne mulighed for at tilføje eller fjerne et element fra begge sider af køen. Array-deques har ingen kapacitetsbegrænsninger, og de vokser efter behov for at understøtte brugen.

Lad os forstå ArrayDeque med et eksempel:

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. Indstil grænseflade

Et sæt er en uordnet samling af objekter, hvor duplikerede værdier ikke kan gemmes. Denne samling bruges, når vi ønsker at undgå kopiering af objekterne og kun ønsker at gemme de unikke objekter. Denne sætgrænseflade er implementeret af forskellige klasser som HashSet, TreeSet, LinkedHashSet osv. Da alle underklasserne implementerer sættet, kan vi instansiere et sætobjekt med enhver af disse klasser.

For eksempel:

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

Følgende er de klasser, der implementerer Set-grænsefladen:

jeg). HashSet

HashSet-klassen er en iboende implementering af hash-tabellens datastruktur. De objekter, som vi indsætter i HashSet, garanterer ikke at blive indsat i samme rækkefølge. Objekterne indsættes baseret på deres hashkode. Denne klasse tillader også indsættelse af NULL-elementer. Lad os forstå HashSet med et eksempel:

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

Et LinkedHashSet minder meget om et HashSet. Forskellen er, at denne bruger en dobbelt linket liste til at gemme dataene og bevarer rækkefølgen af ​​elementerne.

Lad os forstå LinkedHashSet med et eksempel:

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. Sorted Set Interface

Denne grænseflade minder meget om den indstillede grænseflade. Den eneste forskel er, at denne grænseflade har ekstra metoder, der opretholder rækkefølgen af ​​elementerne. Den sorterede sæt-grænseflade udvider sætgrænsefladen og bruges til at håndtere de data, der skal sorteres. Klassen som implementerer denne grænseflade er TreeSet. Da denne klasse implementerer SortedSet, kan vi instansiere et SortedSet-objekt med denne klasse.

For eksempel:

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

Klassen som implementerer den sorterede sæt-grænseflade er TreeSet.

Træsæt

TreeSet-klassen bruger et træ til opbevaring. Rækkefølgen af ​​elementerne opretholdes af et sæt, der bruger deres naturlige rækkefølge, uanset om der er tilvejebragt en eksplicit komparator eller ej. Dette skal være i overensstemmelse med equals, hvis det skal implementere Set-grænsefladen korrekt. Det kan også bestilles af en komparator, der leveres på et bestemt oprettelsestidspunkt, afhængigt af hvilken konstruktør der bruges.

Lad os forstå TreeSet med et eksempel:

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. Kortgrænseflade

Et kort er en datastruktur, der understøtter nøgleværdi-parret til at kortlægge dataene. Denne grænseflade understøtter ikke dublerede nøgler, fordi den samme nøgle ikke kan have flere tilknytninger, men den tillader duplikerede værdier i forskellige nøgler. Et kort er nyttigt, hvis der er data, og vi ønsker at udføre operationer på basis af nøglen. Denne kortgrænseflade er implementeret af forskellige klasser som f.eks HashMap , Trækort , osv. Da alle underklasserne implementerer kortet, kan vi instansiere et kortobjekt med enhver af disse klasser.

For eksempel:

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

Den ofte anvendte implementering af en kortgrænseflade er et HashMap.

HashMap

HashMap giver den grundlæggende implementering af kortgrænsefladen til Java. Den gemmer dataene i (nøgle, værdi) par. For at få adgang til en værdi i et HashMap skal vi kende dens nøgle. HashMap bruger en teknik kaldet Hashing. Hashing er en teknik til at konvertere en stor streng til en lille streng, der repræsenterer den samme streng, så indekseringen og søgeoperationerne er hurtigere. HashSet bruger også HashMap internt.

Lad os forstå HashMap med et eksempel:

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>