Qualsiasi gruppo di singoli oggetti rappresentato come una singola unità è noto come raccolta di oggetti Java. In Java, un framework separato denominato the Quadro della raccolta è stato definito in JDK 1.2 che contiene tutte le classi di raccolta Java e l'interfaccia.
In Java, l'interfaccia Raccolta ( java.util.Collection ) e l'interfaccia della mappa ( java.util.Map ) sono le due principali interfacce root delle classi di raccolta Java.
Cosa dovresti imparare nelle raccolte Java?
- Elenco interfaccia
- Classe Elenco astratto
- Classe di elenchi sequenziali astratti
- Lista di array
- Classe vettoriale
- Classe di stack
- Classe Lista collegata
- Interfaccia della coda
- Blocco dell'interfaccia della coda
- Classe AbstractQueue
- Classe PriorityQueue
- Classe PriorityBlockingQueue
- Classe ConcurrentLinkedQueue
- Classe ArrayBlockingQueue
- Classe DelayQueue
- Classe LinkedBlockingQueue
- LinkedTransferQueue
- E l'interfaccia
- Interfaccia BlockingDeque
- Classe ConcurrentLinkedDeque
- Classe ArrayDeque
- Imposta l'interfaccia
- Classe di insieme astratto
- Classe CopyOnWriteArraySet
- Classe EnumSet
- Classe HashMap simultanea
- Classe HashSet
- Classe LinkedHashSet
- Interfaccia SortedSet
- Interfaccia NavigableSet
- Set di alberi
- Classe ConcurrentSkipListSet
- Interfaccia della mappa
- Interfaccia della mappa ordinata
- Interfaccia mappa navigabile
- Interfaccia ConcurrentMap
- Classe TreeMap
- Classe AbstractMap
- Classe HashMap simultanea
- Classe EnumMap
- Classe HashMap
- Classe IdentityHashMap
- Classe HashMap collegata
- Classe HashTable
- Classe di proprietà
- Altri concetti importanti
- Come convertire HashMap in ArrayList
- Seleziona casualmente gli elementi da un elenco
- Come aggiungere tutti gli elementi da una raccolta a un ArrayList
- Conversione di mappe Java in elenco
- Conversione da array a ArrayList
- Conversione da ArrayList a array
- Differenze tra Array e ArrayList
Cos'è un framework in Java?
Un framework è un insieme di classi e interfacce che forniscono un'architettura già pronta. Per implementare una nuova funzionalità o una classe, non è necessario definire un framework. Tuttavia, una progettazione ottimale orientata agli oggetti include sempre un framework con una raccolta di classi tale che tutte le classi svolgano lo stesso tipo di attività.
Necessità di un framework di raccolta separata in Java
Prima dell'introduzione del Collection Framework (o prima del JDK 1.2), i metodi standard per raggruppare oggetti Java (o raccolte) erano Array O Vettori , O Tabelle hash . Tutte queste raccolte non avevano un'interfaccia comune. Pertanto, sebbene lo scopo principale di tutte le raccolte sia lo stesso, l'implementazione di tutte queste raccolte è stata definita in modo indipendente e non ha avuto alcuna correlazione tra loro. Inoltre, è molto difficile per gli utenti ricordare tutte le differenze metodi , sintassi e costruttori presenti in ogni classe di raccolta.
Capiamolo con un esempio di aggiunta di un elemento in una tabella hash e un vettore.
operatore resto Python
Esempio:
Giava
// 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()> > }> }> |
>
>Produzione
1 1 geeks>
Come possiamo osservare, nessuna di queste raccolte (Array, Vector o Hashtable) implementa un'interfaccia di accesso ai membri standard, è stato molto difficile per i programmatori scrivere algoritmi che possano funzionare per tutti i tipi di raccolte. Un altro svantaggio è che la maggior parte dei metodi “Vector” sono definitivi, il che significa che non possiamo estendere la classe “Vector” per implementare un tipo simile di Collection. Pertanto, gli sviluppatori Java hanno deciso di creare un'interfaccia comune per affrontare i problemi sopra menzionati e hanno introdotto il Collection Framework nel post JDK 1.2 in cui sia i vettori legacy che le Hashtable sono stati modificati per conformarsi al Collection Framework.
Vantaggi del Java Collection Framework
Poiché la mancanza di un quadro di raccolta ha dato origine alla serie di svantaggi di cui sopra, i seguenti sono i vantaggi del quadro di raccolta.
- API coerente: L'API ha un set base di interfacce come Collezione , Impostato , Elenco , O Carta geografica , tutte le classi (ArrayList, LinkedList, Vector, ecc.) che implementano queste interfacce hanno Alcuni insieme di metodi comuni.
- Riduce lo sforzo di programmazione: Un programmatore non deve preoccuparsi del design della Collection ma piuttosto può concentrarsi sul suo miglior utilizzo nel suo programma. Pertanto, il concetto di base della programmazione orientata agli oggetti (cioè) dell'astrazione è stato implementato con successo.
- Aumenta la velocità e la qualità del programma: Aumenta le prestazioni fornendo implementazioni ad alte prestazioni di strutture dati e algoritmi utili perché in questo caso il programmatore non deve pensare alla migliore implementazione di una struttura dati specifica. Può semplicemente utilizzare la migliore implementazione per aumentare drasticamente le prestazioni del suo algoritmo/programma.
Gerarchia del framework di raccolta in Java
Il pacchetto di utilità (java.util) contiene tutte le classi e le interfacce richieste dal framework di raccolta. Il framework della raccolta contiene un'interfaccia denominata interfaccia iterabile che consente all'iteratore di scorrere tutte le raccolte. Questa interfaccia è estesa dall'interfaccia della raccolta principale che funge da root per il framework della raccolta. Tutte le raccolte estendono questa interfaccia di raccolta estendendo così le proprietà dell'iteratore e i metodi di questa interfaccia. La figura seguente illustra la gerarchia del framework della raccolta.
Prima di comprendere i diversi componenti nel framework di cui sopra, comprendiamo innanzitutto una classe e un'interfaccia.
- Classe : Una classe è un progetto o un prototipo definito dall'utente da cui vengono creati gli oggetti. Rappresenta l'insieme di proprietà o metodi comuni a tutti gli oggetti di un tipo.
- Interfaccia : Come una classe, un'interfaccia può avere metodi e variabili, ma i metodi dichiarati in un'interfaccia sono astratti per impostazione predefinita (solo firma del metodo, nessuno). Le interfacce specificano cosa deve fare una classe e non come. È il modello della classe.
Metodi dell'interfaccia di raccolta
Questa interfaccia contiene vari metodi che possono essere utilizzati direttamente da tutte le collezioni che implementano questa interfaccia. Sono:
Metodo | Descrizione |
---|---|
aggiungi(Oggetto) | Questo metodo viene utilizzato per aggiungere un oggetto alla raccolta. |
addAll(Raccolta c) | Questo metodo aggiunge tutti gli elementi della raccolta data a questa raccolta. |
chiaro() | Questo metodo rimuove tutti gli elementi da questa raccolta. |
contiene(Oggetto o) | Questo metodo restituisce true se la raccolta contiene l'elemento specificato. |
contieneTutto(Collezione c) | Questo metodo restituisce true se la raccolta contiene tutti gli elementi della raccolta specificata. |
uguale(Oggetto o) | Questo metodo confronta l'oggetto specificato con questa raccolta per verificarne l'uguaglianza. |
codice hash() | Questo metodo viene utilizzato per restituire il valore del codice hash per questa raccolta. |
è vuoto() | Questo metodo restituisce true se questa raccolta non contiene elementi. |
iteratore() | Questo metodo restituisce un iteratore sugli elementi di questa raccolta. |
massimo() | Questo metodo viene utilizzato per restituire il valore massimo presente nella raccolta. |
parallelStream() | Questo metodo restituisce uno stream parallelo con questa raccolta come origine. |
rimuovi(Oggetto o) | Questo metodo viene utilizzato per rimuovere l'oggetto specificato dalla raccolta. Se sono presenti valori duplicati, questo metodo rimuove la prima occorrenza dell'oggetto. |
rimuoviTutto(Raccolta c) | Questo metodo viene utilizzato per rimuovere tutti gli oggetti menzionati nella raccolta data dalla raccolta. |
rimuoviSe(filtro predicato) | Questo metodo viene utilizzato per rimuovere tutti gli elementi di questa raccolta che soddisfano i dati predicato . |
keepAll(Raccolta c) | Questo metodo viene utilizzato per conservare solo gli elementi di questa raccolta contenuti nella raccolta specificata. |
misurare() | Questo metodo viene utilizzato per restituire il numero di elementi nella raccolta. |
divisore() | Questo metodo viene utilizzato per creare un file Spliteratore sugli elementi di questa collezione. |
flusso() | Questo metodo viene utilizzato per restituire uno stream sequenziale con questa raccolta come origine. |
toArray() | Questo metodo viene utilizzato per restituire un array contenente tutti gli elementi di questa raccolta. |
Interfacce che estendono l'interfaccia delle raccolte Java
Il framework di raccolta contiene più interfacce in cui ogni interfaccia viene utilizzata per archiviare un tipo specifico di dati. Di seguito le interfacce presenti nel framework.
1. Interfaccia iterabile
Questa è l'interfaccia root per l'intero framework di raccolta. L'interfaccia di raccolta estende l'interfaccia iterabile. Pertanto, intrinsecamente, tutte le interfacce e le classi implementano questa interfaccia. La funzionalità principale di questa interfaccia è fornire un iteratore per le raccolte. Pertanto, questa interfaccia contiene solo un metodo astratto che è l'iteratore. Restituisce il
Iterator iterator();>
2. Interfaccia di raccolta
Questa interfaccia estende l'interfaccia iterabile ed è implementata da tutte le classi nel framework della raccolta. Questa interfaccia contiene tutti i metodi di base di ogni raccolta come aggiungere dati nella raccolta, rimuovere dati, cancellare dati, ecc. Tutti questi metodi sono implementati in questa interfaccia perché questi metodi sono implementati da tutte le classi indipendentemente dal loro stile di attuazione. Inoltre, la presenza di questi metodi in questa interfaccia garantisce che i nomi dei metodi siano universali per tutte le raccolte. Pertanto, in sintesi, possiamo dire che questa interfaccia costituisce la base su cui vengono implementate le classi collection.
3. Elenco interfaccia
Questa è un'interfaccia figlia dell'interfaccia della raccolta. Questa interfaccia è dedicata ai dati del tipo elenco in cui possiamo memorizzare tutte le raccolte ordinate di oggetti. Ciò consente anche la presenza di dati duplicati. Questa interfaccia dell'elenco è implementata da varie classi come ArrayList, Vector, Stack, ecc. Poiché tutte le sottoclassi implementano l'elenco, possiamo istanziare un oggetto elenco con una qualsiasi di queste classi.
Per esempio:
List al = new ArrayList (); List ll = new LinkedList (); List v = new Vector (); Where T is the type of the object>
Le classi che implementano l'interfaccia List sono le seguenti:
io). Lista di array
ArrayList ci fornisce array dinamici in Java. Tuttavia, potrebbe essere più lento degli array standard ma può essere utile nei programmi in cui è necessaria molta manipolazione nell'array. La dimensione di un ArrayList viene aumentata automaticamente se la raccolta aumenta o si riduce se gli oggetti vengono rimossi dalla raccolta. Java ArrayList ci consente di accedere in modo casuale all'elenco. ArrayList non può essere utilizzato per classe involucro per tali casi.
Comprendiamo l'ArrayList con il seguente esempio:
Giava
// 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) + ' '); } }> |
>
>Produzione
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
ii). Lista collegata
La classe LinkedList è un'implementazione di Comprendiamo la LinkedList con il seguente esempio:
Giava
// 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) + ' '); } }> |
>
>Produzione
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
iii). Vettore
Un vettore ci fornisce array dinamici in Java. Tuttavia, potrebbe essere più lento degli array standard ma può essere utile nei programmi in cui è necessaria molta manipolazione nell'array. Questo è identico a ArrayList in termini di implementazione. Tuttavia, la differenza principale tra un vettore e un ArrayList è che un Vector è sincronizzato e un ArrayList non è sincronizzato.
Capiamo il Vettore con un esempio:
Giava
// 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) + ' '); } }> |
>
>Produzione
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>
iv). Pila
Stack modelli di classi e implementa ilultimo ad entrare, primo ad uscire. Oltre alle operazioni push e pop di base, la classe fornisce altre tre funzioni: vuoto, ricerca e sbircia. La classe può anche essere definita sottoclasse di Vector.
Capiamo lo stack con un esempio:
Giava
// 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() +> ' '> );> > }> > }> }> |
>
>Produzione
Geeks For Geeks Geeks Geeks For Geeks>
Nota: Stack è una sottoclasse di Vector e una classe legacy. È thread-safe e potrebbe essere un sovraccarico in un ambiente in cui la sicurezza del thread non è necessaria. Un'alternativa a Stack è usare ArrayDequeue che non è thread-safe e ha un'implementazione dell'array più veloce.
4. Interfaccia della coda
Come suggerisce il nome, un'interfaccia di coda mantiene l'ordine FIFO (First In First Out) simile a una coda di coda nel mondo reale. Questa interfaccia è dedicata alla memorizzazione di tutti gli elementi in cui l'ordine degli elementi è importante. Ad esempio, ogni volta che proviamo a prenotare un biglietto, i biglietti vengono venduti in base all'ordine di arrivo. Pertanto, il biglietto viene assegnato a colui la cui richiesta arriva per prima in coda. Esistono varie classi come PriorityQueue , ArrayDeque , ecc. Poiché tutte queste sottoclassi implementano la coda, possiamo istanziare un oggetto coda con una qualsiasi di queste classi.
Per esempio:
Queue pq = new PriorityQueue (); Queue ad = new ArrayDeque (); Where T is the type of the object.>
L'implementazione più frequentemente utilizzata dell'interfaccia della coda è PriorityQueue.
Coda prioritaria
Una PriorityQueue viene utilizzata quando si suppone che gli oggetti vengano elaborati in base alla priorità. È noto che una coda segue l'algoritmo First-In-First-Out, ma a volte è necessario che gli elementi della coda vengano elaborati in base alla priorità e in questi casi viene utilizzata questa classe. PriorityQueue si basa sull'heap delle priorità. Gli elementi della coda prioritaria sono ordinati secondo l'ordinamento naturale, ovvero per a Comparatore fornito al momento della costruzione della coda, a seconda del costruttore utilizzato.
Capiamo la coda con priorità con un esempio:
Giava
// 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());> > }> }> |
>
>Produzione
10 10 15>
5. E l'interfaccia
Questa è una variazione molto leggera del Per esempio:
Deque ad = new ArrayDeque (); Where T is the type of the object.>
La classe che implementa l'interfaccia deque è ArrayDeque.
ArrayDeque
La classe ArrayDeque implementata nel framework della raccolta ci fornisce un modo per applicare un array ridimensionabile. Si tratta di un tipo speciale di array che cresce e consente agli utenti di aggiungere o rimuovere un elemento da entrambi i lati della coda. Le deque di array non hanno limitazioni di capacità e crescono secondo necessità per supportare l'utilizzo.
Capiamo ArrayDeque con un esempio:
Giava
// 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);> > }> }> |
>
>Produzione
[10, 20, 30, 40, 50] [291, 564, 24, 14]>
6. Imposta l'interfaccia
Un set è una raccolta non ordinata di oggetti in cui non è possibile archiviare valori duplicati. Questa raccolta viene utilizzata quando desideriamo evitare la duplicazione degli oggetti e desideriamo archiviare solo oggetti unici. Questa interfaccia set è implementata da varie classi come HashSet, TreeSet, LinkedHashSet, ecc. Poiché tutte le sottoclassi implementano il set, possiamo istanziare un oggetto set con una qualsiasi di queste classi.
Per esempio:
Set hs = new HashSet (); Set lhs = new LinkedHashSet (); Set ts = new TreeSet (); Where T is the type of the object.>
Di seguito sono riportate le classi che implementano l'interfaccia Set:
io). HashSet
La classe HashSet è un'implementazione intrinseca della struttura dati della tabella hash. Gli oggetti che inseriamo nell'HashSet non garantiscono di essere inseriti nello stesso ordine. Gli oggetti vengono inseriti in base al loro hashcode. Questa classe permette anche l'inserimento di elementi NULL. Capiamo HashSet con un esempio:
Giava
// 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());> > }> > }> }> |
>
>Produzione
Very helpful Geeks For Is>
ii). LinkedHashSet
Un LinkedHashSet è molto simile a un HashSet. La differenza è che questo utilizza un elenco doppiamente collegato per memorizzare i dati e mantiene l'ordine degli elementi.
Capiamo il LinkedHashSet con un esempio:
Giava
// 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());> > }> > }> }> |
>
>Produzione
Geeks For Is Very helpful>
7. Interfaccia impostata ordinata
Questa interfaccia è molto simile all'interfaccia impostata. L'unica differenza è che questa interfaccia dispone di metodi aggiuntivi che mantengono l'ordine degli elementi. L'interfaccia del set ordinato estende l'interfaccia del set e viene utilizzata per gestire i dati che devono essere ordinati. La classe che implementa questa interfaccia è TreeSet. Poiché questa classe implementa SortedSet, possiamo istanziare un oggetto SortedSet con questa classe.
Per esempio:
SortedSet ts = new TreeSet (); Where T is the type of the object.>
La classe che implementa l'interfaccia dell'insieme ordinato è TreeSet.
Set di alberi
La classe TreeSet utilizza un albero per l'archiviazione. L'ordinamento degli elementi viene mantenuto da un insieme utilizzando il loro ordinamento naturale indipendentemente dal fatto che venga fornito o meno un comparatore esplicito. Questo deve essere coerente con equals se si vuole implementare correttamente l'interfaccia Set. Può anche essere ordinato da un Comparator fornito in un momento di creazione prestabilito, a seconda del costruttore utilizzato.
Capiamo TreeSet con un esempio:
Giava
// 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());> > }> > }> }> |
>
>Produzione
For Geeks Is Very helpful>
8. Interfaccia della mappa
Una mappa è una struttura dati che supporta la coppia chiave-valore per la mappatura dei dati. Questa interfaccia non supporta chiavi duplicate perché la stessa chiave non può avere più mappature, tuttavia consente valori duplicati in chiavi diverse. Una mappa è utile se ci sono dei dati e vogliamo eseguire delle operazioni in base alla chiave. Questa interfaccia della mappa è implementata da varie classi come HashMap , Mappa ad albero , ecc. Poiché tutte le sottoclassi implementano la mappa, possiamo istanziare un oggetto mappa con una qualsiasi di queste classi.
Per esempio:
Map hm = new HashMap (); Map tm = new TreeMap (); Where T is the type of the object.>
L'implementazione utilizzata di frequente di un'interfaccia Map è una HashMap.
HashMap
HashMap fornisce l'implementazione di base dell'interfaccia Map di Java. Memorizza i dati in coppie (Chiave, Valore). Per accedere a un valore in una HashMap, dobbiamo conoscerne la chiave. HashMap utilizza una tecnica chiamata Hashing. L'hashing è una tecnica per convertire una stringa di grandi dimensioni in una stringa piccola che rappresenta la stessa stringa in modo che le operazioni di indicizzazione e ricerca siano più veloci. HashSet utilizza anche HashMap internamente.
Capiamo l'HashMap con un esempio:
Giava
// 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());> > }> }> |
>
>Produzione
Value for 1 is Geeks 1 Geeks 2 For 3 Geeks>