30 top java collections interview questions with answers
Questo tutorial include un elenco delle domande di intervista sulle raccolte Java più frequenti insieme a risposte ed esempi per te :
L'API principale di Java è Java Collections Framework. Supporta il concetto fondamentale di questo linguaggio di programmazione. Se vuoi essere uno sviluppatore Java, dovresti essere ben consapevole di questi concetti fondamentali.
L'area delle collezioni Java è estremamente ampia e molte domande possono essere poste in un'intervista. Qui abbiamo raccolto un elenco di quante più domande pertinenti che potrebbero esserti poste durante la tua intervista.
=> Controlla qui per vedere qui i tutorial di formazione su Java dalla A alla Z.
Cosa imparerai:
Domande di intervista sulle collezioni Java
D # 1) Spiega il Java Collections Framework.
Risposta: Il Java Collections Framework è un'architettura che aiuta nella gestione e nell'archiviazione di un gruppo di oggetti. Con esso, gli sviluppatori possono accedere a strutture di dati preconfezionate e manipolare i dati anche con l'uso di algoritmi.
La raccolta Java include l'interfaccia e le classi che supportano operazioni come ricerca, eliminazione, inserimento, ordinamento, ecc. Insieme all'interfaccia e alle classi, le raccolte Java includono anche algoritmi che aiutano nelle manipolazioni.
D # 2) Quali sono i vantaggi delle raccolte Java?
Risposta:
I vantaggi delle raccolte Java sono:
- Invece di implementare le nostre classi di raccolta, utilizza le classi di raccolta principali, riducendo così lo sforzo richiesto per il suo sviluppo.
- Utilizza le classi del framework di raccolta che sono ben testate. Quindi, la qualità del codice è migliorata.
- Riduce lo sforzo nella manutenzione del codice.
- Java Collection Framework è interoperabile e riutilizzabile.
D # 3) Cosa sai della gerarchia delle collezioni in Java?
Risposta:
[Immagine fonte ]
D # 4) Parlaci delle interfacce di base della Java Collection.
Risposta:
Di seguito sono elencate le interfacce di base di Java Collection Framework.
Collezione: È la base della gerarchia della Collezione e ne rappresenta gli elementi. Tuttavia, Java non fornisce alcuna applicazione diretta di Collection. Inoltre, la maggior parte delle raccolte Java proviene da questa interfaccia.
Impostato: Non può contenere elementi duplicati poiché modella l'astrazione dell'insieme matematico. Come suggerisce il nome, rappresenta set, per esempio, un mazzo di carte.
Elenco: Può contenere elementi duplicati ed è una raccolta ordinata. Puoi usare il suo indice per accedere a qualsiasi elemento al suo interno. L'elenco è come un arrangiamento, un array, con una lunghezza dinamica.
Queste sono alcune interfacce di Java Collection. Tuttavia, ci sono alcune altre interfacce come quelle mostrate di seguito.
- Coda
- Dequeue
- Iteratore
- Iterabile
- SortedSet
- ListIterator.
D # 5) Perché le interfacce serializzabili e clonabili non vengono estese dalla raccolta Interfaccia?
Risposta: Il compito dell'interfaccia di raccolta è specificare un gruppo di oggetti chiamati elementi. L'implementazione delle Collezioni decide come verranno mantenuti gli elementi. Per esempio, le implementazioni List consentono elementi duplicati ma le implementazioni Set no.
Molte implementazioni hanno un metodo per la clonazione pubblica. Ma non è pratico includerlo in tutte le implementazioni della raccolta poiché la raccolta è astratta e l'implementazione è tutto ciò che conta.
Il significato e le ramificazioni sia della serializzazione che della clonazione hanno senso mentre si lavora con le implementazioni sostanziali. Pertanto, spetta all'implementazione effettiva decidere se può essere serializzato o clonato e come.
Ulteriori informazioni = >> Marker Interface in Java: serializzabile e clonabile
Ecco perché indurre la serializzazione e la clonazione in ogni implementazione non è molto flessibile ed è restrittivo.
D # 6) Cosa intendi per Iterator in Java Collection Framework?
Risposta: Negli array semplici, possiamo usare i cicli per accedere a ogni elemento. Quando è necessario un approccio simile per accedere agli elementi in una raccolta, optiamo per gli iteratori. Iterator è un costrutto utilizzato per accedere agli elementi degli oggetti Collection.
In Java, gli iteratori sono gli oggetti che implementano l'interfaccia 'Iteratore' di Collection Framework. Questa interfaccia fa parte del pacchetto java.util.
Alcune delle caratteristiche degli iteratori sono:
- Gli iteratori vengono utilizzati per attraversare gli oggetti Collection.
- Gli iteratori sono noti come 'Cursore Java universale' poiché possiamo utilizzare lo stesso iteratore per tutte le raccolte.
- Gli iteratori forniscono operazioni di 'lettura' e 'rimozione' oltre ad attraversare le raccolte.
- Poiché sono universali e funzionano con tutte le raccolte, gli iteratori sono più facili da implementare.
Elenca le domande sulla raccolta Java
D # 7) Sei a conoscenza degli usi dell'interfaccia elenco?
[Immagine fonte ]
Risposta: Lo scopo dell'interfaccia elenco è mantenere l'ordine di inserimento. Consente inoltre la memorizzazione di valori duplicati.
Aiuta nella manipolazione regolare degli elementi a seconda del suo indice con i vari metodi che contiene. ArrayList, Vector, Stack e LinkedList sono le varie classi che implementano l'interfaccia List.
D # 8) Cosa capisci di ArrayList in Java?
Risposta: L'implementazione dell'interfaccia List è ArrayList. Aggiunge o rimuove dinamicamente elementi dall'elenco e fornisce anche l'inserimento di elementi insieme all'accesso posizionale. ArrayList consente valori duplicati e la sua dimensione può aumentare dinamicamente se il numero degli elementi supera la dimensione iniziale.
D # 9) Come convertirete un array di stringhe in un ArrayList?
Risposta: Questa è una domanda di programmazione di livello principiante che un intervistatore chiede per verificare la tua comprensione dell'utilità di raccolta. Collection e Arrays sono le due classi di utilità del Collection Framework a cui gli intervistatori sono spesso interessati.
Le raccolte offrono determinate funzioni statiche per eseguire attività specifiche sui tipi di raccolta. Mentre Array ha funzioni di utilità che esegue sui tipi di array.
//String array String[] num_words = {'one', 'two', 'three', 'four', 'five'}; //Use java.util.Arrays class to convert to list List wordList = Arrays.asList(num_words);
Nota che oltre al tipo String, puoi anche utilizzare Arrays di altro tipo per convertire in ArrayList.
Per esempio,
//Integer array Integer[] numArray = {10,20,30,40}; //Convert to list using Arrays class asList method List num_List = Arrays.asList(numArray);
D # 10) Converti array in ArrayList e ArrayList in array.
Risposta: Per convertire ArrayList in Array, viene utilizzato il metodo toArray (): List_object.toArray (nuova stringa [List_object.size ()])
Mentre il metodo asList () viene utilizzato per convertire Array in ArrayList- Arrays.asList (elemento). AsList () è un metodo statico in cui gli oggetti List sono i parametri.
D # 11) Che cos'è una LinkedList e quanti tipi di essa sono supportati in Java?
[Immagine fonte ]
Risposta: LinkedList è una struttura di dati con una sequenza di collegamenti in cui ogni collegamento è connesso al collegamento successivo.
In Java vengono utilizzati due tipi di LinkedList per memorizzare gli elementi:
- Elenco collegato singolarmente: Qui, ogni nodo memorizza i dati del nodo insieme a un riferimento o il puntatore al nodo successivo.
- Double LinkedList: Una doppia LinkedList viene fornita con doppi riferimenti, un riferimento al nodo successivo e un altro al nodo precedente.
D # 12) Cosa intendi per BlockingQueue?
Risposta: In una semplice coda, sappiamo che ogni volta che la coda è piena, non possiamo inserire altri elementi. In questo caso, la coda fornisce semplicemente un messaggio che la coda è piena ed esce. Un caso simile si verifica quando la coda è vuota e non ci sono elementi da rimuovere nella coda.
Invece di uscire semplicemente quando l'inserimento / rimozione non può essere eseguito, che ne dici di aspettare fino a quando non possiamo inserire o rimuovere l'elemento?
A ciò risponde una variazione della coda chiamata 'Coda di blocco' . Nella coda di blocco, il blocco viene attivato durante le operazioni di accodamento e rimozione dalla coda ogni volta che la coda tenta di accodare una coda piena o rimuovere dalla coda una coda vuota.
Il blocco è mostrato nella figura seguente.
BlockingQueue
Pertanto, durante l'operazione di accodamento, la coda di blocco attenderà fino a quando uno spazio non sarà disponibile in modo che un elemento possa essere inserito correttamente. Allo stesso modo, nell'operazione di rimozione dell'accodamento la coda di blocco attenderà fino a quando un elemento non sarà disponibile per l'operazione.
database test di intervista domande e risposte per esperti
La coda di blocco implementa l'interfaccia 'BlockingQueue' che appartiene al pacchetto 'java.util.concurrent'. Dobbiamo ricordare che l'interfaccia BlockingQueue non consente il valore nullo. Se rileva null, genera NullPointerException.
D # 13) Che cos'è una coda prioritaria in Java?
Risposta: Una coda di priorità in Java è simile alle strutture di dati dello stack o della coda. È un tipo di dati astratto in Java ed è implementato come classe PriorityQueue nel pacchetto java.util. La coda di priorità ha una caratteristica speciale che ogni elemento nella coda di priorità ha una priorità.
In una coda con priorità, un elemento con priorità più alta è il server prima dell'elemento con priorità più bassa.
Tutti gli articoli nella coda di priorità vengono ordinati secondo l'ordine naturale. Possiamo anche ordinare gli elementi in base all'ordine personalizzato fornendo un comparatore al momento della creazione di un oggetto coda di priorità.
Impostare le domande dell'intervista all'interfaccia
D # 14) Qual è l'uso di Set Interface? Parlaci delle classi che lo implementano Interfaccia.
Risposta: Set Interface viene utilizzato nella teoria degli insiemi per modellare l'insieme matematico. È simile all'interfaccia List e tuttavia è leggermente diversa da essa. Set Interface non è una raccolta ordinata, quindi non viene mantenuto l'ordine quando rimuovi o aggiungi gli elementi.
Principalmente, non supporta gli elementi duplicati, quindi ogni elemento nell'interfaccia del set è unico.
Consente inoltre confronti significativi delle istanze di Set anche quando sono presenti implementazioni diverse. Inoltre, mette in un contratto più sostanziale sulle azioni delle operazioni di uguali e hashCode. Se due esempi hanno gli stessi elementi, allora sono uguali.
Per tutti questi motivi, Set Interface non ha operazioni basate sull'indice degli elementi come List. Utilizza solo metodi ereditati dall'interfaccia di raccolta. TreeSet, EnumSet, LinkedHashSet e HashSet implementano Set Interface.
D # 15) Voglio aggiungere un elemento nullo a HashSet e TreeSet. Posso?
Risposta: Non è possibile aggiungere alcun elemento nullo in TreeSet poiché utilizza NavigableMap per l'archiviazione degli elementi. Ma puoi aggiungerne solo uno a HashSet. SortedMap non consente chiavi null e NavigableMap è il suo sottoinsieme.
Ecco perché non puoi aggiungere un elemento nullo a TreeSet, verrà fuori l'eccezione NullPointerException ogni volta che proverai a farlo.
D # 16) Cosa sai di LinkedHashSet?
Risposta: LinkedHashSet è la sottoclasse di HashSet e applica l'interfaccia Set. Come una forma ordinata di HashSet, gestisce un elenco a doppio collegamento in tutti gli elementi che contiene. Mantiene l'ordine di inserimento e, proprio come la sua classe genitore, trasporta solo elementi univoci.
D # 17) Parla del modo in cui HashSet memorizza gli elementi.
Risposta: HashMap memorizza le coppie di valori-chiave ma le chiavi devono essere univoche. Questa funzionalità di Map viene utilizzata da HashSet per assicurarsi che ogni elemento sia unico.
La dichiarazione Map in HashSet appare come mostrato di seguito:
private transient HashMapmap; //This is added as value for each key private static final Object PRESENT = new Object();
Gli elementi archiviati in HashSet vengono archiviati come chiave nella mappa e l'oggetto viene presentato come valore.
D # 18) Spiega il metodo EmptySet ().
Risposta: Il metodo Emptyset () rimuove gli elementi null e restituisce il set vuoto non modificabile. Questo set immutabile è serializzabile. La dichiarazione del metodo di Emptyset () è- public static final Set emptySet ().
Domande di intervista sull'interfaccia della mappa
D # 19) Parlaci dell'interfaccia della mappa.
Risposta: Map Interface è progettata per ricerche più veloci e memorizza gli elementi sotto forma di coppie di valori-chiave. Poiché ogni chiave è unica qui, si connette o si associa a un solo valore. Queste coppie di valori-chiave sono chiamate voci della mappa.
In questa interfaccia sono presenti firme di metodo per il recupero, l'inserimento e la rimozione di elementi a seconda della chiave univoca. Questo lo rende uno strumento perfetto per mappare le associazioni valore-chiave, come un dizionario.
D # 20) La mappa non estende l'interfaccia della raccolta. Perché?
Risposta: L'interfaccia di raccolta è l'accumulo di oggetti e questi oggetti vengono archiviati strutturalmente con il meccanismo di accesso specificato. Mentre l'interfaccia della mappa segue la struttura delle coppie chiave-valore. Il metodo add dell'interfaccia di raccolta non supporta il metodo put dell'interfaccia della mappa.
Questo è il motivo per cui Map non estende l'interfaccia di raccolta, ma è comunque una parte importante di Java Collection Framework.
D # 21) Come funziona HashMap in Java?
Risposta: HashMap è una raccolta basata su Map e i suoi elementi sono costituiti da coppie chiave-valore. Una HashMap è tipicamente indicata da, o. È possibile accedere a ciascun elemento hashmap utilizzando la sua chiave.
Una HashMap funziona secondo il principio dell ''hashing'. Nella tecnica di hashing, una stringa più lunga viene trasformata in una stringa più piccola da una 'funzione hash' che non è altro che un algoritmo. La stringa più piccola consente una ricerca più rapida e un'indicizzazione efficiente.
D # 22) Spiegare IdentityHashMap, WeakHashMap e ConcurrentHashMap.
Risposta:
IdentityHashMap è molto simile a HashMap. La differenza è che durante il confronto degli elementi, IdentityHashMap utilizza l'uguaglianza dei riferimenti. Non è un'implementazione della mappa preferita e sebbene esegua l'interfaccia della mappa, non è intenzionalmente conforme al contratto generale della mappa.
Quindi, quando si confrontano oggetti, questo autorizza l'uso del metodo uguale. È progettato per l'utilizzo in rari casi in cui è necessaria la semantica di uguaglianza dei riferimenti.
WeakHashMap L'implementazione memorizza solo riferimenti deboli alle sue chiavi. Ciò consente la garbage collection di una coppia chiave-valore quando non è più presente alcun riferimento alle sue chiavi all'esterno di WeakHashMap.
Viene utilizzato principalmente con quegli oggetti chiave in cui il test per l'identità dell'oggetto viene eseguito con i suoi metodi uguali utilizzando l'operatore ==.
ConcurrentHashMap implementa entrambe le interfacce ConcurrentMap e Serializable. È la versione aggiornata e migliorata di HashMap in quanto non funziona bene con l'ambiente multithread. Rispetto a HashMap, ha un tasso di prestazioni più elevato.
D # 23) Qual è la qualità di una buona chiave per HashMap?
Risposta: Comprendendo come funziona HashMap, è facile sapere che dipendono principalmente dai metodi uguale e hashCode degli oggetti chiave. Quindi, una buona chiave deve fornire lo stesso hashCode più e più volte indipendentemente dalle volte in cui viene recuperata.
Allo stesso modo, se confrontate con il metodo equals, le stesse chiavi devono restituire true e chiavi diverse devono restituire false. Ecco perché si dice che il miglior candidato per le chiavi HashMap siano le classi immutabili.
Q # 24) Quando puoi usare TreeMap?
[Immagine fonte ]
Risposta: TreeMap, come una forma speciale di HashMap, mantiene l'ordine delle chiavi per impostazione predefinita 'ordinamento naturale', come qualcosa che manca in HashMap. Puoi usarlo per ordinare gli oggetti con qualche chiave.
Per esempio, se vuoi implementare e stampare un dizionario in ordine alfabetico, puoi usare TreeMap insieme a TreeSet. Si ordinerà automaticamente. Ovviamente avresti potuto farlo anche manualmente, ma il lavoro sarà svolto in modo più efficiente con l'uso di TreeMap. Puoi anche usarlo se l'accesso casuale è vitale per te.
Differenza tra le domande
D # 25) Qual è la differenza tra Collection e collections?
Risposta:
Collezione | Collezioni |
---|---|
Non è possibile utilizzare ListIterator per attraversare un set. | ListIterator può attraversare List in qualsiasi direzione. |
È un'interfaccia. | È di classe. |
La raccolta rappresenta un gruppo di oggetti come una singola entità. | Le raccolte definiscono diversi metodi di utilità per gli oggetti della raccolta. |
È l'interfaccia principale di Collection Framework. | Le collezioni sono una classe di utilità. |
Deriva le strutture dati di Collection Framework. | Le raccolte contengono molti metodi statici diversi per aiutare nella manipolazione della struttura dei dati. |
D # 26) In che modo Array è diverso da un ArrayList?
Risposta:
Di seguito sono riportate le differenze tra Array e ArrayList:
Vettore | Lista di array |
---|---|
L'array è una classe fortemente tipizzata. | ArrayList è una classe tipizzata in modo approssimativo. |
L'array non può essere ridimensionato dinamicamente, la sua dimensione è statica. | ArrayList può essere ridimensionato dinamicamente. |
Un array non necessita di boxing e unboxing di elementi. | ArrayList necessita di boxing e unboxing di elementi. |
D # 27) Distinguere tra ArrayList e LinkedList.
Risposta:
Lista di array | Lista collegata |
---|---|
ArrayList utilizza l'array dinamico internamente per memorizzare gli elementi. | LinkedList implementa la lista doppiamente collegata. |
La manipolazione degli elementi di ArrayList è piuttosto lenta. | LinkedList manipola i suoi elementi molto più velocemente. |
ArrayList può agire esclusivamente come un elenco. | LinkedList può agire sia come elenco che come coda. |
Utile per memorizzare e accedere ai dati. | Utile per manipolare i dati. |
Q # 28) In che modo Iterable è diverso da Iterator?
Risposta:
Iterabile | Iteratore |
---|---|
È l'interfaccia del pacchetto Java.lang. | È l'interfaccia del pacchetto Java.util. |
Restituisce un solo metodo astratto noto come Iterator. | Viene fornito con due metodi astratti: hasNext e next. |
Rappresenta una serie di elementi che possono essere attraversati. | Sta per oggetti con stato di iterazione. |
Q # 29) Indica le differenze tra Set e List.
Risposta:
Impostato | Elenco |
---|---|
Imposta attrezzi Imposta interfaccia. | L'elenco implementa l'interfaccia Elenco. |
Set è un insieme non ordinato di elementi. | L'elenco è un insieme ordinato di elementi. |
Il set non mantiene l'ordine degli elementi durante l'inserimento. | List mantiene l'ordine degli elementi durante l'inserimento. |
Il set non consente valori duplicati. | L'elenco consente valori duplicati. |
Il set non contiene alcuna classe legacy. | L'elenco contiene Vector, una classe legacy. |
Il set consente un solo valore nullo. | Nessuna restrizione sul numero di valori null in List. |
D # 30) Qual è la differenza tra Queue e Stack?
Risposta:
Coda | Pila |
---|---|
Queue funziona in base al principio dell'approccio FIFO (First-In-First-Out). | Stack funziona su una base Last-In-First-Out (LIFO). |
L'inserimento e la cancellazione nella coda avvengono a differenti estremi. | L'inserimento e la cancellazione vengono eseguiti dalla stessa estremità chiamata la parte superiore dello stack. |
Enqueue è il nome di Insertion e dequeue è l'eliminazione di elementi. | Push è l'inserimento e Pop è l'eliminazione di elementi in Stack. |
Ha due puntatori: uno al primo elemento della lista (davanti) e uno all'ultimo (dietro). | Ha solo un puntatore che punta all'elemento superiore. |
D # 31) In che modo SinglyLinkedList e DoublyLinkedList sono diversi l'uno dall'altro?
Risposta:
Elenco collegato singolarmente | Elenco doppiamente collegato |
---|---|
Ogni nodo dell'elenco collegato singolarmente è costituito da un dato e da un puntatore al nodo successivo. | Un elenco a doppio collegamento consiste di dati, un puntatore al nodo successivo e un puntatore al nodo precedente. |
L'elenco a collegamento singolo può essere attraversato utilizzando il puntatore successivo. | Una lista doppiamente concatenata può essere attraversata usando sia il puntatore precedente che quello successivo. |
L'elenco a collegamento singolo occupa meno spazio rispetto a un elenco a collegamento doppio. | La lista doppiamente concatenata occupa molto spazio di memoria. |
L'accesso agli elementi non è molto efficiente. | L'accesso agli elementi è efficiente. |
D # 32) In che modo HashMap è diverso da HashTable?
Risposta:
HashMap | HashTable |
---|---|
HashMap eredita la classe AbstractMap | HashTable eredita la classe Dictionary. |
HashMap non è sincronizzato. | HashTable è sincronizzato. |
HashMap consente più valori null ma solo una chiave null. | HashTable non consente un valore o una chiave null. |
HashMap è più veloce. | HashTable è più lento di HashMap. |
HashMap può essere attraversato da Iterator. | HashTable non può essere attraversato utilizzando iteratore o enumeratore. |
D # 33) Elenca la differenza tra ArrayList e Vector.
Risposta:
Lista di array | Vettore |
---|---|
ArrayList non è sincronizzato. | Il vettore è sincronizzato. |
ArrayList non è una classe legacy. | Il vettore è una classe legacy. |
ArrayList aumenta la dimensione della metà di ArrayList quando un elemento viene inserito oltre la sua dimensione. | Vector aumenta le sue dimensioni del doppio quando un elemento viene inserito oltre le sue dimensioni. |
ArrayList non è thread-safe | Vector è un thread-safe. |
Q # 34) In che modo FailFast è diverso da Failsafe?
Risposta:
FailFast | FailSafe |
---|---|
Durante l'iterazione, non è consentita alcuna modifica di una raccolta. | Consente la modifica durante l'iterazione. |
Utilizza la raccolta originale per l'attraversamento. | Utilizza una copia della collezione originale. |
Nessuna memoria aggiuntiva richiesta. | Ha bisogno di memoria extra. |
Genera ConcurrentModificationException. | Non viene generata alcuna eccezione. |
Conclusione
Queste domande dell'intervista sulle collezioni Java ti aiuteranno a prepararti per l'intervista. La tua preparazione per il colloquio sulle collezioni Java deve essere profonda ed estesa, quindi studia queste domande e comprendi bene il concetto.
Queste domande non solo mettono alla prova la tua conoscenza ma anche la tua presenza mentale.
=> Guarda qui la serie di formazione su Java semplice
Lettura consigliata
- Tutorial JAVA per principianti: oltre 100 tutorial video Java pratici
- Nozioni di base su Java: sintassi Java, classe Java e concetti principali di Java
- Domande e risposte dell'intervista
- Domande e risposte al colloquio di prova ETL
- 30 principali domande e risposte per i colloqui HTML [2021 LIST]
- Top 30+ domande e risposte popolari per l'intervista al cetriolo
- Le 40 principali domande e risposte ai colloqui di Java 8 [più importanti]
- Le 30 principali domande e risposte dell'intervista SAS