Struttura della raccolta Java è stato introdotto in JDK 1.2 che contiene tutte le classi e le interfacce della raccolta. Collezione Java è un framework che fornisce un meccanismo per archiviare e manipolare la raccolta di oggetti. Consente agli sviluppatori di accedere a strutture dati preconfezionate e algoritmi per la manipolazione dei dati.
In questo articolo abbiamo trattato i primi 50 Domande per l'intervista sulle raccolte Java e risposte che coprono tutto, dai concetti di raccolta Java di base a quelli avanzati come raccolta di navigazione, WeakHashMap, flussi Lambda ecc. Che tu sia un più fresco o un sviluppatore Java esperto , queste domande per l'intervista sulle raccolte Java ti danno tutta la sicurezza di cui hai bisogno per superare al meglio la tua prossima intervista Java.

Domande per l'intervista sulle raccolte Java
Abbiamo diviso le 50 domande in due parti: Esperti e Matricole. Cominciamo con le domande per le matricole.
Tabella dei contenuti
- Domande di intervista sulla raccolta Java per le matricole
- Domande di intervista sulla raccolta Java per esperti
Domande di intervista sulla raccolta Java per le matricole
1. Cos'è la raccolta in Java?
Il termine collezione si riferisce ad un gruppo di oggetti rappresentati come una unità. Le classi nella gerarchia delle classi della raccolta Java sono divise in due radice interfacce: Raccolta (java.util.Collezione) e mappa (java.util.Map) . Termini che incontrerai mentre impari a conoscere la raccolta in Java:
- Struttura della raccolta: Il Collection Framework di Java definisce classi e interfacce per rappresentare gruppi di oggetti come una singola entità. Gli sviluppatori C++ possono confrontare il framework Collection con STL (libreria di modelli standard) e Container Framework con Collection Framework se provengono da un background C++.
- Interfaccia di raccolta: L’interfaccia di una classe specifica cosa dovrebbe fare, non come. In altre parole, è il progetto della classe. Questa interfaccia fornisce i metodi più comuni per tutti gli oggetti della raccolta che fanno parte del framework della raccolta. In alternativa, rappresenta il singolo oggetto nel suo insieme.
- Classe Collezioni: Membro di Collection Framework, fa parte del pacchetto java.util. L'oggetto raccolta viene fornito con molti metodi di utilità in questa classe.
2. Cos'è un Framework in Java?
I framework sono insiemi di classi E interfacce che forniscono un'architettura già pronta. Non è necessario definire un framework per implementare nuove funzionalità o classi. Di conseguenza, una progettazione ottimale orientata agli oggetti include un framework contenente una raccolta di classi che eseguono tutte compiti simili. Il framework può essere utilizzato in vari modi, ad esempio chiamando i suoi metodi, estendendolo e fornendo callback, ascoltatori e altre implementazioni. Alcuni dei framework popolari in Java sono:
- Primavera
- Ibernazione
- Puntoni
- Kit di strumenti web di Google (GWT)
- Facce JavaServer (JSF)
3. Qual è la differenza tra Array e Collection in Java?
Gli array sono una raccolta di variabili di tipo simile con un nome comune in Java. Esistono alcune differenze tra gli array in Java e C/C++. D'altra parte, le raccolte sono gruppi di singoli oggetti che formano un'unica entità nota come raccolta di oggetti.
| Array | Collezione |
|---|---|
| Gli array hanno dimensioni fisse, ovvero una volta creato un array non possiamo aumentarlo o diminuirlo in base alle nostre esigenze. | La collezione è coltivabile in natura e si basa sulle nostre esigenze. Possiamo aumentare o diminuire le dimensioni. |
| Per quanto riguarda la memoria, non è consigliabile utilizzare gli array. | Per quanto riguarda la memoria, si consiglia l'uso delle raccolte. |
| Per quanto riguarda le prestazioni, si consiglia l'uso degli array. | Per quanto riguarda le prestazioni, si sconsiglia l'uso delle raccolte. |
| Gli array possono contenere solo elementi di tipi di dati omogenei. | La raccolta può contenere elementi sia omogenei che eterogenei. |
Per ulteriori informazioni consultare l’articolo – Differenza tra array e raccolte in Java
4. Quali sono le varie interfacce utilizzate in Java Collections Framework?
La raccolta è nota come radice della gerarchia della raccolta. Le raccolte rappresentano gruppi di oggetti noti come elementi. La piattaforma Java non fornisce alcuna implementazione diretta di questa interfaccia ma l'interfaccia Collection viene implementata dalle classi List e Set.
- Interfaccia di raccolta
- Interfaccia elenco
- Imposta l'interfaccia
- Interfaccia della coda
- Interfaccia di rimozione della coda
- Interfaccia della mappa
5. Spiegare la gerarchia del framework Collection in Java.
Tutte le classi e le interfacce richieste dal framework di raccolta sono contenute nel pacchetto di utilità (java. util). I framework di raccolta hanno un'interfaccia chiamata interfaccia iterabile, che consente all'iteratore di scorrere tutte le raccolte. Oltre a questa interfaccia, l'interfaccia della raccolta principale 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.
Gerarchia della raccolta Java
6. Quali sono i vantaggi del Framework di raccolta?
Vantaggi del 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.
7. Cos'è ArrayList in Java?
ArrayList fa parte del framework della raccolta Java ed è una classe del pacchetto java.util. Ci fornisce array dinamici in Java. I principali vantaggi di ArrayList sono che, se dichiariamo un array, è necessario menzionare la dimensione, ma in ArrayList non è necessario menzionare la dimensione di ArrayList, se vuoi menzionare la dimensione, puoi farlo.

Immagine dell'elenco degli array
Per ulteriori informazioni consultare l’articolo – ArrayList in Java
8. Qual è la differenza tra Collezione e Collezioni?
| Collezione | Collezioni |
|---|---|
| È un'interfaccia. | È una classe di utilità. |
| Viene utilizzato per rappresentare un gruppo di singoli oggetti come una singola unità. | Definisce diversi metodi di utilità utilizzati per operare sulla raccolta. |
| La Collection è un'interfaccia che contiene un metodo statico a partire da Java8. L'interfaccia può contenere anche metodi astratti e predefiniti. | Contiene solo metodi statici. |
Per ulteriori informazioni consultare l’articolo – Raccolta vs raccolte in Java con esempio
9. Differenza tra ArrayList e LinkedList nel framework della raccolta Java?

ArrayList e LinkedList
| Lista di array | Lista collegata |
|---|---|
| Questa classe utilizza un array dinamico per memorizzare gli elementi al suo interno. Con l'introduzione dei generici, questa classe supporta l'archiviazione di tutti i tipi di oggetti. | Questa classe utilizza un elenco doppiamente collegato per memorizzare gli elementi al suo interno. Similmente all'ArrayList, anche questa classe supporta l'archiviazione di tutti i tipi di oggetti. |
| La manipolazione di ArrayList richiede più tempo a causa dell'implementazione interna. Ogni volta che rimuoviamo un elemento, internamente, l'array viene attraversato e i bit di memoria vengono spostati. | La manipolazione di LinkedList richiede meno tempo rispetto a ArrayList perché, in un elenco doppiamente collegato, non esiste il concetto di spostamento dei bit di memoria. L'elenco viene attraversato e il collegamento di riferimento viene modificato. |
| Questa classe implementa un'interfaccia List. Pertanto, questo funge da elenco. | Questa classe implementa sia l'interfaccia List che l'interfaccia Deque. Pertanto, può fungere da elenco e da deque. |
| Questa classe funziona meglio quando l'applicazione richiede la memorizzazione dei dati e l'accesso ad essi. | Questa classe funziona meglio quando l'applicazione richiede la manipolazione dei dati archiviati. |
Per ulteriori informazioni consultare l’articolo – ArrayList vs LinkedList in Java
10. Cos'è un iteratore?
Framework di raccolta di Java utilizza gli iteratori per recuperare gli elementi uno per uno. Questo iteratore è universale poiché può essere utilizzato con qualsiasi tipo di oggetto Collection. Usando Iterator, possiamo eseguire sia operazioni di lettura che di rimozione. Questa è una versione migliorata di Enumerazione con l'aggiunta della rimozione di elementi.
Quando si enumerano gli elementi in tutte le interfacce implementate del framework Collection, come ad esempio Impostato , Elenco , Coda , Riguardo a cosa e tutte le classi implementate di Map, è necessario utilizzare un Iterator. L'unico cursore disponibile per l'intero framework della raccolta è l'iteratore. Utilizzando il metodo iterator() nell'interfaccia Collection, puoi creare un oggetto iteratore.
Sintassi:
Iterator itr = c. iterator ();>
Nota: Qui c è qualsiasi oggetto Collection. itr è di tipo interfaccia Iterator e si riferisce a c.
Per ulteriori informazioni consultare l’articolo – Iteratori in Java
11. Qual è la differenza tra un Iteratore e un'Enumerazione?
Una delle principali differenze tra iteratore ed enumerazione è che gli iteratori hanno un metodo delete() mentre le enumerazioni no. Pertanto, utilizzando Iterator possiamo manipolare oggetti aggiungendoli e rimuovendoli dalle raccolte. Poiché l'enumerazione può solo attraversare oggetti e recuperarli, si comporta come un'interfaccia di sola lettura.
Per ulteriori informazioni consultare l’articolo – Differenza tra Iteratore ed Enumerazione
12. Qual è la differenza tra List e Set in Java
Una delle principali differenze tra un elenco e un set è che un elenco può contenere elementi duplicati mentre un set contiene solo elementi univoci. L'elenco è Ordinato e mantiene l'ordine dell'oggetto a cui vengono aggiunti. Il set non è ordinato.
| Elenco | Impostato |
|---|---|
| La Lista è una sequenza indicizzata. | Il Set è una sequenza non indicizzata. |
| L'elenco consente elementi duplicati | Il set non consente elementi duplicati. |
| È possibile accedere agli elementi in base alla loro posizione. | L'accesso alla posizione degli elementi non è consentito. |
| È possibile memorizzare più elementi nulli. | Gli elementi nulli possono essere archiviati solo una volta. |
| Le implementazioni dell'elenco sono ArrayList, LinkedList, Vector, Stack | Le implementazioni dei set sono HashSet, LinkedHashSet. |
Per ulteriori informazioni consultare l’articolo – Differenza tra elenco e set in Java
13. Quali sono le migliori pratiche per Java Collections Framework?
Di seguito sono riportate alcune delle migliori pratiche durante l'utilizzo delle raccolte Java:
- I programmi dovrebbero essere scritti come interfacce, non implementazioni, in modo da poter modificare l'implementazione in seguito.
- Quando possibile, utilizzare Generics per garantire l'indipendenza dai tipi ed evitare ClassCastException.
- Scegliere la tipologia di collezione adeguata in base alla necessità. Ad esempio, se la dimensione è fissa, potremmo voler utilizzare un Array su un ArrayList. Quando si esegue l'iterazione sulla mappa, dovremmo utilizzare LinkedHashMap. Set è il modo migliore per evitare duplicati.
- Utilizza le classi immutabili fornite da JDK come chiavi in Map per evitare l'implementazione di hashCode() ed equals().
- Per aumentare la leggibilità del codice, dovremmo usare isEmpty() invece di trovare la dimensione della raccolta e confrontarla con zero.
- Invece di scrivere la propria implementazione, utilizzare la classe di utilità Collections per ottenere raccolte di sola lettura, sincronizzate o vuote. Migliora il riutilizzo del codice garantendo allo stesso tempo una maggiore stabilità.
14. Cos'è una coda prioritaria in Java?
Le PriorityQueues vengono utilizzate per elaborare gli oggetti in base alla loro priorità. Le code seguono l'algoritmo First-In-First-Out, ma a volte gli elementi della coda devono essere elaborati in base alla loro priorità, ed è qui che entra in gioco PriorityQueue. Le code con priorità si basano sugli heap di priorità.
Gli elementi della coda con priorità vengono ordinati secondo l'ordinamento naturale, oppure da un comparatore fornito in fase di costruzione della coda, a seconda del costruttore utilizzato.

Code prioritarie in Java
Dichiarazione:
public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue>
La classe implementa le interfacce Serializable, Iterable, Collection e Queue.
15. Qual è la differenza tra List, set e map in Java?
| Elenco | Impostato | Carta geografica |
|---|---|---|
| L'interfaccia dell'elenco consente elementi duplicati | Il set non consente elementi duplicati. | La mappa non consente elementi duplicati |
| L'elenco mantiene l'ordine di inserimento. se di Rudyard Kipling riassunto | L'insieme non mantiene alcun ordine di inserimento. | La mappa inoltre non mantiene alcun ordine di inserimento. |
| Possiamo aggiungere qualsiasi numero di valori nulli. | Ma nell'insieme quasi solo un valore nullo. | La mappa consente al massimo una singola chiave nulla e un numero qualsiasi di valori nulli. |
| Le classi di implementazione dell'elenco sono Array List e LinkedList. | Le classi di implementazione dell'insieme sono HashSet, LinkedHashSet e TreeSet. | Le classi di implementazione della mappa sono HashMap, HashTable, TreeMap, ConcurrentHashMap e LinkedHashMap. |
Per ulteriori informazioni consultare l’articolo – Differenza tra elenco, set e mappa in Java
16. Qual è la differenza tra coda e pila?
| Pila | Coda |
|---|---|
| Stack funziona secondo il principio LIFO, il che significa che l'ultimo elemento inserito sarà il primo elemento ad essere eliminato. | Le code funzionano secondo il principio FIFO, il che significa che l'elemento inserito per primo sarà il primo ad essere eliminato. |
| Negli stack, l'inserimento e l'eliminazione avvengono solo dall'alto. | Nelle code, l'inserimento avviene nella parte posteriore dell'elenco e l'eliminazione avviene dalla parte anteriore dell'elenco. |
| L'operazione di inserimento è chiamata operazione push. | L'operazione di inserimento è chiamata operazione di accodamento. |
| L'operazione di eliminazione è chiamata operazione pop. | L'operazione di eliminazione è denominata operazione di rimozione dalla coda. |
| La parte superiore di uno stack punta sempre all'ultimo elemento dell'elenco, che è l'unico puntatore utilizzato per accedere all'elenco. | Vengono mantenuti due puntatori per l'accesso alle code. Il puntatore anteriore punta al primo elemento inserito e il puntatore posteriore punta all'ultimo elemento inserito. |
17. Cos'è BlockingQueue in Java?
L'interfaccia BlockingQueue in Java viene aggiunta in Java 1.5 insieme a varie altre classi di utilità simultanee come ConcurrentHashMap, Counting Semaphore, CopyOnWriteArrrayList, ecc. L'interfaccia BlockingQueue supporta il controllo del flusso (oltre alla coda) introducendo il blocco se BlockingQueue è piena o vuota.
Un thread che tenta di accodare un elemento in una coda completa viene bloccato finché qualche altro thread non fa spazio nella coda, rimuovendo uno o più elementi o cancellando completamente la coda. Allo stesso modo, blocca un thread che tenta di eliminare da una coda vuota finché altri thread non inseriscono un elemento. BlockingQueue non accetta un valore null. Se proviamo ad accodare l'elemento null, viene lanciata NullPointerException.
Utilizzo di BlockingQueue

Blocco della coda in Java
La gerarchia di BlockingQueue

Gerarchia della coda di blocco in Java
Dichiarazione:
public interface BlockingQueue extends Queue>
Qui, E è il tipo di elementi archiviati nella Collezione.
Per ulteriori informazioni consultare l’articolo – Interfaccia BlockingQueue in Java
18. Cos'è l'hashCode()?

Immagine per dimostrare il codice hash Java
Il metodo hashCode() restituisce il valore hashcode come numero intero. È definito nella classe Java Object che calcola i valori hash di determinati oggetti di input. Il valore Hashcode viene utilizzato principalmente nelle raccolte basate su hashing come HashMap, HashSet, HashTable... ecc. Questo metodo deve essere sovrascritto in ogni classe che sovrascrive il metodo equals().
Sintassi:
public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.>
Per ulteriori informazioni consultare l’articolo – metodi equals() e hashCode() in Java
19. Distinguere tra ArrayList e Vector nel Java Collection Framework.
Nelle interviste sulle collezioni, questa domanda viene posta frequentemente; tuttavia, Vector è sincronizzato mentre ArrayList non lo è. ArrayList è più veloce di Vector. La dimensione dell'array di ArrayList viene aumentata del 50% quando necessario, mentre la capacità di Vector viene raddoppiata ogni volta che è necessario.
archi in c

Elenco di array e vettore in Java
| Lista di array | Vettore |
|---|---|
| ArrayList non è sincronizzato | Il vettore è sincronizzato. |
| La dimensione di ArrayList viene incrementata fino al 50% della dimensione corrente dell'array se il numero di elementi supera la sua capacità. | La dimensione di ArrayList viene incrementata fino al 100% della dimensione dell'array corrente se il numero di elementi supera la sua capacità. |
| ArrayList è veloce perché non è sincronizzato. | Vector è più lento perché è sincronizzato. |
| L'interfaccia dell'iteratore viene utilizzata per attraversare gli elementi | È possibile utilizzare un'interfaccia iteratore o un'enumerazione per attraversare il vettore. |
Per ulteriori informazioni consultare l’articolo – Vector vs ArrayList in Java
20. Distinguere tra Iterator e ListIterator.
| Iteratore | ListIterator |
|---|---|
| Può attraversare gli elementi presenti nella Collezione solo nella direzione in avanti. | Può attraversare gli elementi presenti nella Collezione sia in avanti che all'indietro. |
| Aiuta ad attraversare la mappa, l'elenco e il set. | Può attraversare solo List e non gli altri due. |
| Gli indici non possono essere ottenuti utilizzando Iterator. | Dispone di metodi come nextIndex() e previousIndex() per ottenere indici di elementi in qualsiasi momento mentre si attraversa la Lista. |
| Non è possibile modificare o sostituire elementi presenti nella Collezione | Possiamo modificare o sostituire gli elementi con l'aiuto di set(E e) |
Per ulteriori informazioni consultare l’articolo – Differenza tra un Iterator e ListIterator
21. Qual è la differenza tra un Iteratore e un'Enumerazione?
Iteratore: È un iteratore universale poiché possiamo applicarlo a qualsiasi oggetto Collection. Utilizzando un Iterator, possiamo eseguire sia operazioni di lettura che di rimozione.
Sintassi:
// Here 'c' is any Collection object. itr is of // type Iterator interface and refers to 'c' Iterator itr = c.iterator();>
Enumerazione: L'enumerazione (o enum) è un tipo di dati definito dall'utente. Viene utilizzato principalmente per assegnare nomi a costanti integrali, i nomi rendono un programma facile da leggere e mantenere.
Sintassi:
// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; }> | Iteratore | Enumerazione |
|---|---|
| L'iteratore è un cursore universale poiché è applicabile a tutte le classi di raccolta. | L'enumerazione non è un cursore universale poiché si applica solo alle classi legacy. |
| L'iteratore ha il metodoremove(). | L'enumerazione non ha il metodoremove(). |
| L'iteratore può apportare modifiche (ad esempio utilizzando il metodo Remove() che rimuove l'elemento dalla Collection durante l'attraversamento). | L'interfaccia di enumerazione agisce come un'interfaccia di sola lettura, non è possibile apportare alcuna modifica alla Collezione mentre si attraversano gli elementi della Collezione. |
| Iterator non è un'interfaccia legacy. Iterator può essere utilizzato per l'attraversamento di HashMap, LinkedList, ArrayList, HashSet, TreeMap e TreeSet. | L'enumerazione è un'interfaccia legacy utilizzata per attraversare Vector e Hashtable. |
Per ulteriori informazioni consultare l’articolo – Differenza tra Iteratore ed Enumerazione
22. Quali sono le caratteristiche di Java Hashmap?
HashMap è simile a HashTable, ma non è sincronizzato. Ci consente di memorizzare anche le chiavi null, ma dovrebbe esserci un solo oggetto chiave null e può esserci un numero qualsiasi di valori null. Questa classe non garantisce l'ordine della mappa. Per utilizzare questa classe e i suoi metodi, è necessario importare java.util. HashMap pacchetto o la sua superclasse.

HashMap in Java
Sintassi:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable>
parametri: Richiede due parametri e precisamente i seguenti:
- Il tipo di chiavi gestite da questa mappa (K)
- Il tipo di valori mappati (V)
Per ulteriori informazioni consultare l’articolo – HashMap in Java con esempi
23. Cosa sono le interfacce di raccolta?
IL Collezione è un membro del Java Collections Framework. Fa parte di java.util pacchetto. È una delle interfacce radice della gerarchia della raccolta. L'interfaccia Collection non è implementata direttamente da nessuna classe. Tuttavia, viene implementato indirettamente tramite i suoi sottotipi o sottointerfacce come List, Queue e Set.
Per esempio, la classe HashSet implementa l'interfaccia Set che è una sottointerfaccia dell'interfaccia Collection. Se l'implementazione di una raccolta non implementa una particolare operazione, dovrebbe definire il metodo corrispondente per lanciare UnsupportedOperationException.
La gerarchia della raccolta:

Interfaccia di raccolta in Java
24. Spiegare l'interfaccia dell'elenco.

Interfaccia di classe in Java
In Java, l'interfaccia List consente all'utente di memorizzare una raccolta ordinata di oggetti. L'elenco è l'interfaccia figlio di Collection. In Collection, un elenco è una raccolta ordinata di oggetti che possono avere valori duplicati. Poiché List preserva l'ordine di inserimento, consente l'accesso posizionale e l'inserimento, che consente anche valori duplicati.
Sintassi:
public interface List extends Collection ;>
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.
Esempio:
Lista al = nuova ArrayList ();
Lista ll = nuova ListaCollegata ();
Lista v = nuovo Vettore ();Dove T è il tipo dell'oggetto

Elenco di array in Java
Le classi che implementano l'interfaccia List sono le seguenti:
- Lista di array
- Lista collegata
- Vettore
- Pila
25. Scrivere un programma per convertire un dato array in una raccolta con il metodo asList().
Per convertire i dati basati su array in quelli basati su Collection possiamo usare java.util.Arrays classe. Questa classe fornisce un metodo statico asList(T… a) che converte l'array in una Collection.
Giava
// Convert an Array into Collection in Java> // import java util library> import> java.util.*;> > // class for writing logic of the problem> public> class> ArrayToCollection {> >public> static> void> main(String args[])> >{> >// array input> >String students[] = {>'Kamlesh'>,>'Abhay'>,> >'Abhishek'>,>'Shivansh'> };> > >// printing input elements for comparison> >System.out.println(>'Array input: '> >+ Arrays.toString(students));> > >// converting array into Collection> >// with asList() function> >List studentList = Arrays.asList(students);> > >// print converted elements> >System.out.println(>'Converted elements: '> >+ studentList);> >}> }> |
>
>Produzione
Array input: [Kamlesh, Abhay, Abhishek, Shivansh] Converted elements: [Kamlesh, Abhay, Abhishek, Shivansh]>
26. Distinguere tra HashSet e HashMap
| HashSet | HashMap |
|---|---|
| HashSet implementa l'interfaccia Set | HashMap implementa l'interfaccia Map |
| Non sono ammessi duplicati | Sì, sono consentiti valori duplicati, ma non è consentita alcuna chiave duplicata |
| I valori fittizi sono consentiti in HashSet. | Nessun valore fittizio è consentito in HashMap. |
| Durante un'operazione di aggiunta è richiesto un singolo oggetto | 2 Gli oggetti sono obbligatori durante un'operazione di aggiunta |
| La velocità è relativamente più lenta di HashMap | La velocità è relativamente più veloce di HashSet perché qui è stata utilizzata la tecnica di hashing. |
| Avere un singolo valore nullo | Singola chiave nulla e qualsiasi numero di valori nulli |
| Per l'inserimento viene utilizzato il metodo Add() | Per l'inserimento viene utilizzato il metodo put(). |
Per ulteriori informazioni consultare l’articolo – Differenza tra HashMap e HashSet
27. Distinguere tra HashSet e HashTable.
| HashSet | HashTable |
|---|---|
| HashSet consente elementi NULL | HashTable non consente elementi NULL. |
| Non è garantito che gli oggetti inseriti in HashSet vengano inseriti nello stesso ordine. Gli oggetti vengono inseriti in base al relativo codice hash. LinkedHashSet può essere utilizzato per mantenere l'ordine. | HashTable non mantiene l'ordine di inserimento. |
| HashSet non è sincronizzato ma può essere sincronizzato esternamente. | HashTable è sincronizzato. |
| Il metodo add() viene utilizzato per inserire in HashSet | Il metodo put() viene utilizzato per inserire in HashTable |
28. Qual è la dimensione predefinita del fattore di carico nella raccolta basata su hashing?
All'aumentare del fattore di carico, la capacità aumenta in modo che la complessità operativa dell'HashMap rimanga O(1) se il rapporto tra l'elemento corrente e la capacità iniziale supera la soglia. Il significato di complessità operativa di O(1) significa che le operazioni di recupero e inserimento richiedono un tempo costante. La dimensione del fattore di carico predefinita è 0,75 . La capacità predefinita viene calcolata moltiplicando la capacità iniziale per il fattore di carico.
Per ulteriori informazioni consultare l’articolo – Fattore di caricamento in HashMap in Java con esempi
Domande di intervista sulla raccolta Java per esperti
29. Qual è la differenza tra Comparable e Comparator in Java?
Java fornisce due interfacce per ordinare gli oggetti utilizzando i membri dati della classe:
- Paragonabile
- Comparatore
| Paragonabile | Comparatore |
|---|---|
| L'interfaccia Comparable fornisce un'unica sequenza di ordinamento. | L'interfaccia del Comparatore fornisce più sequenze di ordinamento. |
| La classe attuale viene modificata da un'interfaccia comparabile | La classe effettiva non viene modificata dall'interfaccia Comparator. |
| Il metodo compareTo() viene utilizzato per ordinare gli elementi. | Il metodo compare() viene utilizzato per ordinare gli elementi. |
| Paragonabile è presente nel pacchetto java.lang | Il comparatore è presente nel pacchetto java.util |
Per ulteriori informazioni consultare l’articolo – Comparabile vs comparatore in Java
30. Qual è la differenza tra fail-fast e fail-safe?
Gli iteratori in Java vengono utilizzati per scorrere gli oggetti Collection. Gli iteratori Fail-Fast lanciano immediatamente un'eccezione ConcurrentModificationException se c'è un modificazione strutturale della collezione. La modifica strutturale significa aggiungere o rimuovere qualsiasi elemento da una raccolta mentre un thread esegue l'iterazione su quella raccolta. Iterator sulle classi ArrayList e HashMap sono alcuni esempi di Iterator fail-fast.
| Fail-Fast | A prova di errore |
|---|---|
| ConcurrentModificationException viene generata durante la modifica dell'oggetto durante il processo di iterazione. | Non viene generata alcuna eccezione |
| Fail-Fast richiede meno memoria durante il processo. | L'iteratore Fail-Safe richiede più memoria durante il processo. |
| Un oggetto clone non viene creato durante il processo di iterazione. | Durante il processo di iterazione viene creato un oggetto clone o una copia. |
| Fail-Fast non consente modifiche durante il processo di iterazione. | Fail-Safe consente la modifica durante il processo di iterazione. |
| Fail-Fast è veloce, | Il Fail-Safe è leggermente più lento del Fail-Safe. |
| Esempi: ArrayList, Vector, HashMap, HashSet, ecc. | Esempi: ConcurrentHashMap, CopyOnWriteArrayList, ecc. |
Per ulteriori informazioni consultare l’articolo – Iteratori Fail Fast e Fail Safe in Java
31. Scrivere un programma per ripetere l'elenco utilizzando l'espressione lambda.
L'iterazione può essere eseguita utilizzando a espressione lambda.
Sintassi:
list_name.forEach(variable->{//blocco di codice})> Giava
// Java Program to iterate over a List> // using forEach()> > // Importing all classes of> // java.util method> import> java.util.*;> > // Class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an ArrayList> >List l =>new> ArrayList();> > >// Adding elements to the List> >// Custom inputs> >l.add(>'Geeks'>);> >l.add(>'for'>);> >l.add(>'Geeks'>);> > >// Lambda expression printing all elements in a List> >l.forEach((temp) ->{ System.out.println(temp); });> >}> }> |
>
>Produzione
Geeks for Geeks>
Per ulteriori informazioni consultare l’articolo – Scorri l'elenco in Java
32. Cos'è IdentityHashMap?
IdentityHashMap implementa l'interfaccia Map utilizzando Hashtable, confrontando chiavi (e valori) utilizzando l'uguaglianza dei riferimenti anziché l'uguaglianza degli oggetti. Questa classe implementa l'interfaccia Map, ma rompe intenzionalmente il contratto generale di Map, che richiede che gli oggetti vengano confrontati utilizzando il metodo equals(). Questa classe viene utilizzata quando l'utente consente il confronto degli oggetti utilizzando i riferimenti. Appartiene al pacchetto java.util.
Per ulteriori informazioni consultare l’articolo – Classe IdentityHashMap in Java
33. Scrivere un programma in Java per visualizzare il contenuto di una HashTable utilizzando l'enumerazione.
La classe hashtable implementa una tabella hash che associa le chiavi ai valori. Qualsiasi oggetto non nullo può essere utilizzato come chiave o come valore. Per archiviare e recuperare correttamente gli oggetti da una tabella hash, gli oggetti utilizzati come chiavi devono implementare il metodo hashCode e il metodo equals. Di seguito è riportato il programma per visualizzare il contenuto di una HashTable utilizzando l'enumerazione:
Giava
indice di Java
// Java Program to Demonstrate Getting Values> // as an Enumeration of Hashtable class> > import> java.io.*;> import> java.util.Enumeration;> import> java.util.Hashtable;> > // Main class> // EnumerationOnKeys> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating an empty hashtable> >Hashtable hash> >=>new> Hashtable();> > >// Inserting key-value pairs into hash table> >// using put() method> >hash.put(>1>,>'Geeks'>);> >hash.put(>2>,>'for'>);> >hash.put(>3>,>'Geeks'>);> > >// Now creating an Enumeration object> >// to read elements> >Enumeration e = hash.elements();> > >// Condition holds true till there is> >// single key remaining> > >// Printing elements of hashtable> >// using enumeration> >while> (e.hasMoreElements()) {> > >// Printing the current element> >System.out.println(e.nextElement());> >}> >}> }> |
>
>Produzione
Geeks for Geeks>
34. Scrivere un programma in Java per ottenere la visualizzazione della raccolta dei valori presenti in una HashMap.
La classe HashMap di Java ha il metodo java.util.HashMap.values() per creare raccolte dai valori HashMap. Fondamentalmente restituisce una vista Raccolta di valori HashMap.
Giava
// Java code to illustrate the values() method> import> java.util.*;> > public> class> Hash_Map_Demo {> >public> static> void> main(String[] args)> >{> > >// Creating an empty HashMap> >HashMap hash_map> >=>new> HashMap();> > >// Mapping string values to int keys> >hash_map.put(>0>,>'Welcome'>);> >hash_map.put(>1>,>'to'>);> >hash_map.put(>2>,>'Geeks'>);> >hash_map.put(>3>,>'4'>);> >hash_map.put(>4>,>'Geeks'>);> > >// Displaying the HashMap> >System.out.println(>'Initial Mappings are: '> >+ hash_map);> > >// Using values() to get the set view of values> >System.out.println(>'The collection is: '> >+ hash_map.values());> >}> }> |
>
>Produzione
Initial Mappings are: {0=Welcome, 1=to, 2=Geeks, 3=4, 4=Geeks} The collection is: [Welcome, to, Geeks, 4, Geeks]> Per ulteriori informazioni consultare l’articolo – Metodo HashMapvalues() in Java
35. Scrivi un programma per unire due ArrayList in un unico ArrayList.
Dati due ArrayList in Java, il nostro compito è unirli.
Giava
// Java program to demonstrate> // How to join ArrayList> > import> java.util.*;> > public> class> GFG {> >public> static> void> main(String args[])> >{> > >ArrayList list_1 =>new> ArrayList();> > >list_1.add(>'Geeks'>);> >list_1.add(>'For'>);> >list_1.add(>'ForGeeks'>);> > >// Print the ArrayList 1> >System.out.println(>'ArrayList 1: '> + list_1);> > >ArrayList list_2 =>new> ArrayList();> > >list_2.add(>'GeeksForGeeks'>);> >list_2.add(>'A computer portal'>);> > >// Displaying the ArrayList 2> >System.out.println(>'ArrayList 2: '> + list_2);> > >// using Collection.addAll() method to join two> >// arraylist> >list_1.addAll(list_2);> > >// Print the joined ArrayList> >System.out.println(>'Joined ArrayLists: '> + list_1);> >}> }> |
>
>Produzione
ArrayList 1: [Geeks, For, ForGeeks] ArrayList 2: [GeeksForGeeks, A computer portal] Joined ArrayLists: [Geeks, For, ForGeeks, GeeksForGeeks, A computer portal]>
Per ulteriori informazioni consultare l’articolo – Unisciti a due ArrayList in Java
36. Come puoi sincronizzare un ArrayList in Java?
Utilizzando il metodo Collections.synchronizedList(), possiamo sincronizzare le nostre raccolte in Java. SynchronizedList() restituisce un elenco sincronizzato (thread-safe) supportato da una selezione.
Giava
Unità logica aritmetica
// Java program to show synchronization of ArrayList> import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Non Synchronized ArrayList> >List list =>new> ArrayList();> > >list.add(>'Eat'>);> >list.add(>'Coffee'>);> >list.add(>'Code'>);> >list.add(>'Sleep'>);> >list.add(>'Repeat'>);> > >// Synchronizing ArrayList in Java> >list = Collections.synchronizedList(list);> > >// we must use synchronize block to avoid> >// non-deterministic behavior> >synchronized> (list)> >{> >Iterator it = list.iterator();> >while> (it.hasNext()) {> >System.out.println(it.next());> >}> >}> >}> }> |
>
>Produzione
Eat Coffee Code Sleep Repeat>
37. Cos'è una classe di proprietà in Java?
La classe delle proprietà è una sottoclasse di Hashtable. La classe delle proprietà memorizza un elenco di valori la cui chiave è una stringa e il cui valore è anche una stringa. Le proprietà possono definire altri elenchi di classi di proprietà, ma l'impostazione predefinita è proprietà.
Caratteristiche della classe Proprietà:
- La proprietà è una sottoclasse di Hashtable.
- Il file Properties viene utilizzato per archiviare e recuperare il tipo di dati stringa per un elenco di valori in cui la chiave è una stringa e anche il valore è una stringa.
- Se l'elenco delle proprietà originali non contiene una determinata proprietà chiave, la ricerca verrà invece effettuata nell'elenco delle proprietà predefinite.
- Gli oggetti possono essere condivisi da più thread senza sincronizzazione esterna.
- La classe delle proprietà può essere utilizzata per recuperare le proprietà del sistema.
Per ulteriori informazioni consultare l’articolo – Classe delle proprietà in Java
38. Cosa succederà se utilizzi HashMap in un'applicazione Java multithread?
In un ambiente multi-thread, se più thread alterano strutturalmente la mappa, ad esempio aggiungendo, rimuovendo o modificando mappature, la struttura dei dati interna di HashMap potrebbe danneggiarsi e potrebbero esserci collegamenti mancanti, voci errate e la mappa stessa potrebbe diventare completamente inutile. Pertanto, non dovresti utilizzare HashMap in un'applicazione simultanea; utilizzare invece ConcurrentHashMap o Hashtable che è thread-safe. ConcurrentHashMap include tutti i metodi di Hashtable nonché la piena simultaneità di recuperi e aggiornamenti.
In che modo ThreadSafeConcurrentHashMap è diventato thread-safe?
- La classe java.util.Concurrent.ConcurrentHashMap fornisce la sicurezza del thread dividendo la mappa in segmenti, il che consente di eseguire il blocco solo una volta per segmento, ovvero una volta per ciascun thread.
- L'operazione di lettura in ConcurrentHashMap non richiede un blocco.
Per ulteriori informazioni consultare l’articolo – In che modo ConcurrentHashMap ottiene la sicurezza dei thread in Java?
39. Cosa succederà se due chiavi diverse di HashMap restituiscono lo stesso hashcode()?
Quando due chiavi diverse di HashMap restituiscono lo stesso codice hash, finiranno nello stesso bucket; pertanto, si verificheranno collisioni. In caso di collisione, ovvero l'indice di due o più nodi è lo stesso, i nodi sono uniti da un elenco di collegamenti, ovvero il secondo nodo è referenziato dal primo nodo e il terzo dal secondo, e così via.
Per ulteriori informazioni consultare l’articolo – Funzionamento interno di HashMap in Java
40. Cos'è WeakHashMap?
WeakHashMap implementa l'interfaccia Map. A differenza di HashMap, WeakHashMap consente la garbage collection anche se l'oggetto specificato come chiave non contiene alcun riferimento nonostante sia associato a WeakHashMap. In altre parole, Garbage Collector è migliore di WeakHashMap.
Per ulteriori informazioni consultare l’articolo – Hashmap vs WeakHashMap in Java
41. Cos'è UnsupportedOperationException?
Nel contesto delle API o delle implementazioni degli elenchi, UnsupportedOperationException è un'eccezione comune. L'eccezione viene generata quando l'operazione richiesta non può essere eseguita. Questa classe è un membro del Java Collections Framework.
Sintassi:
public class UnsupportedOperationException extends RuntimeException>
Per ulteriori informazioni consultare l’articolo – Eccezione operazione non supportata
42. Come creare una raccolta di sola lettura in Java?
La creazione di una raccolta di sola lettura implica limitare l'oggetto al solo recupero dei dati e non all'aggiunta o alla rimozione di dati. Java dispone di metodi diversi per diversi tipi di raccolta come unmodifyingCollection(), unmodifyingMap(), ununmodifyingSet(), ecc. java.util. La classe delle raccolte definisce tutti i metodi. Il metodo unmodifyingCollection() crea una raccolta di sola lettura. Richiede un riferimento alla classe Collection. Se abbiamo un oggetto Set Interface, possiamo usare immodificabileSet() per renderlo di sola lettura.
Per ulteriori informazioni consultare l’articolo – Come creare una raccolta di sola lettura in Java?
43. Differenza tra PriorityQueue e TreeSet in Java?
| PriorityQueue | Set di alberi |
|---|---|
| PriorityQueue è disponibile in JDK 1.5. | TreeSet è disponibile in JDK 1.4. |
| La struttura dati utilizzata da PriorityQueue è Queue | La struttura dati utilizzata da TreeSet è Impostata. |
| Sono consentiti elementi duplicati. | Non sono ammessi elementi duplicati. |
| Ad eccezione dell'elemento root, il resto degli elementi non seguono alcun ordine particolare in PriorityQueue. | In TreeSet tutti gli elementi rimangono nell'ordine ordinato. |
| Usando PriorityQueue, possiamo recuperare l'elemento più grande o più piccolo nel tempo O(1). | TreeSet non fornisce un modo per recuperare l'elemento più grande o più piccolo in tempo O(1), ma poiché sono in ordine, ottiene il primo o l'ultimo elemento in tempo O(1). |
Per ulteriori informazioni consultare l’articolo – Differenza tra PriorityQueue e TreeSet
44. Cos'è l'operatore diamante in Java?
Gli operatori diamante vengono utilizzati per semplificare l'uso dei generici durante la creazione di oggetti evitando avvisi non controllati in un programma. Quando l'operatore Diamond è stato introdotto in Java 7, possiamo creare l'oggetto senza menzionare il tipo generico sul lato destro dell'espressione come mostrato di seguito.
Sintassi:
List list = new ArrayList();>
Per ulteriori informazioni consultare l’articolo – Operatore del diamante
45. Come funziona TreeMap in Java?
Mappa ad albero memorizza le coppie chiave-valore, ma TreeMap ordina le chiavi in ordine crescente anziché decrescente come HashMap. A seconda del costruttore utilizzato, TreeMap verrà ordinato in base alle sue chiavi o in base a un comparatore. In TreeMap, gli elementi sono ordinati in base ad un albero Rosso-Nero. Un albero rosso-nero è un albero di ricerca binario autobilanciante in cui ogni nodo ha un bit in più e quel bit viene spesso interpretato come il colore (rosso o nero). Questi colori vengono utilizzati per garantire che l'albero rimanga equilibrato durante gli inserimenti e le eliminazioni.

Struttura di un nodo in Java
Per ulteriori informazioni consultare l’articolo – Funzionamento interno di TreeMap in Java
46. Elencare i modi per scorrere su Map in Java?
La classe HashMap fornisce l'interfaccia Map di Java memorizzando i dati in coppie (Chiave, Valore) e accedendovi tramite un indice di un altro tipo. Per utilizzare questa classe è necessario importare java.util.HashMap pacchetto o la sua superclasse.
Esistono numerosi modi per eseguire l'iterazione su HashMap, di cui 5 sono elencati di seguito:
- Scorri un EntrySet HashMap utilizzando gli iteratori.
- Scorrere attraverso HashMap KeySet utilizzando Iterator.
- Itera HashMap utilizzando il ciclo for-each.
- Iterazione attraverso una HashMap utilizzando le espressioni Lambda.
- Passa attraverso una HashMap utilizzando l'API Stream.
Per ulteriori informazioni consultare l’articolo – Come eseguire l'iterazione di HashMap in Java
47. Cos'è CopyOnWriteArrayList in Java?

CopyOnWriteArrayList in Java
JDK 1.5 ha introdotto una versione migliorata di ArrayList chiamata CopyOnWriteArrayList, in cui tutte le modifiche (aggiunta, impostazione, rimozione, ecc.) vengono implementate da una nuova copia. Può essere trovato in java.util.concurrent. È una struttura dati creata per essere utilizzata in un ambiente simultaneo. In un ambiente basato su thread, CopyOnWriteArrayList è destinato alla lettura frequente e all'aggiornamento poco frequente. CopyOnWriteArrayList è una versione thread-safe di ArrayList.
Per ulteriori informazioni consultare l’articolo – CopyOnWriteArrayList in Java
48. Cos'è EnumMap in Java?
EnumMap è un'implementazione dell'interfaccia Map specifica per i tipi di enumerazione. La classe EnumMap è un membro di Java Collections Framework e non è sincronizzata. Estende AbstractMap e implementa l'interfaccia Map in Java. EnumMap appartiene al pacchetto java.util.
Sintassi:
classe pubblica EnumMap
estende AbstractMap implementa Serializable, Cloneable // K deve estendere Enum, il che impone il requisito secondo cui le chiavi devono essere del tipo enum specificato.
parametri:
- Tipo di oggetto chiave
- Tipo di oggetto valore

EnumMap in Java
Per ulteriori informazioni consultare l’articolo – Classe EnumMap in Java
49. Come funziona Hashmap internamente?
HashMap funziona secondo il principio dell'hashing. HashMap contiene un array di Node e Node può rappresentare una classe avente i seguenti oggetti:
- int hash
- Tasto K
- Valore V
- Nodo successivo
Il funzionamento interno di HashMap:
- Hashing
- Secchi
- Calcolo dell'indice in Hashmap
Per ulteriori informazioni consultare l’articolo – Funzionamento interno di HashMap in Java
cinquanta. Perché l'iteratore in hashmap è considerato fail-fast?
gli iteratori fail-fast lanciano immediatamente eccezioni di modifica simultanea se un thread esterno tenta di modificare la raccolta su cui stanno eseguendo l'iterazione. La funzionalità fail-fast garantisce che l'iteratore fallisca immediatamente se rileva che qualsiasi modifica della raccolta porterà a comportamenti anomali in futuro.
Fallisci velocemente La funzionalità garantisce che se l'iteratore ritiene che la modifica della raccolta comporterebbe un comportamento anomalo in qualsiasi momento in futuro, fallisca immediatamente.
Esempio:
Giava
// Java code to demonstrate remove> // case in Fail-fast iterators> > import> java.io.*;> import> java.util.ArrayList;> import> java.util.Iterator;> > public> class> GFG {> >public> static> void> main(String[] args)> >{> >ArrayList arr =>new> ArrayList();> >arr.add(>1>);> >arr.add(>2>);> >arr.add(>3>);> >arr.add(>4>);> >arr.add(>5>);> > >Iterator it = arr.iterator();> >while> (it.hasNext()) {> >if> (it.next() ==>2>) {> >// will not throw Exception> >it.remove();> >}> >}> > >System.out.println(arr);> > >it = arr.iterator();> >while> (it.hasNext()) {> >if> (it.next() ==>3>) {> >// will throw Exception on> >// next call of next() method> >arr.remove(>3>);> >}> >}> >}> }> |
>
1 milione in cifre
>
Produzione:
[1, 3, 4, 5] Exception in thread 'main' java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at FailFastExample.main(FailFastExample.java:28)>
Conclusione
Collezioni Java è importante da comprendere per gli sviluppatori o i programmatori Java perché Java è ampiamente utilizzato in vari settori. È importante che gli sviluppatori abbiano una solida conoscenza dei concetti fondamentali delle raccolte Java. Java è uno dei linguaggi più utilizzati nelle migliori aziende come Uber , Airbnb , Google , Netflix , Instagram , Spotify, Amazzonia , ecc. Per entrare in queste aziende o in qualsiasi altra società IT, è necessario padroneggiare queste domande di intervista sulle raccolte Java, per lo più poste, al fine di crackare la loro valutazione online e il colloquio tecnico basati su Java.
Se stai cercando di esercitarti con domande di codifica, il Programmi di raccolta JAVA può essere una risorsa utile.
Domande di intervista sulle raccolte Java - Domande frequenti
1. Cosa sono le raccolte nelle domande dell'intervista Java?
La raccolta in Java è un framework utilizzato per archiviare e manipolare raccolte di oggetti.
2. Quali sono le 4 classi di raccolta in Java?
Esistono molte raccolte in Java, ma tra queste le raccolte più utilizzate sono:
- Lista di array
- Lista collegata
- HashSet
- Pila
3. HashMap può avere chiavi duplicate?
No, HashMap non può avere chiavi duplicate. Poiché HashMap è una delle raccolte in Java, memorizza il valore sotto forma di valore-chiave e ad ogni chiave è associato il proprio valore. Pertanto, poiché nessuna chiave può avere due valori, non possiamo avere chiavi duplicate in HashMap.
4. Perché l'array non è una raccolta?
L'array non è una raccolta, è tutto a causa della differenza di funzionalità tra raccolte e array, alcuni dei quali sono menzionati di seguito:
- La dimensione dell'Array non può essere modificata una volta dichiarata
- Gli array possono contenere solo elementi di tipi di dati omogenei.
- L'array può contenere sia tipi di dati primitivi che oggetti mentre nelle raccolte è in grado di contenere solo oggetti wrapper.