30 top java collections interview questions with answers
Acest tutorial include o listă cu cele mai frecvente întrebări de interviuri pentru colecțiile Java, împreună cu răspunsuri și exemple pentru dvs. :
API-ul de bază al Java este Java Collections Framework. Acesta susține conceptul fundamental al acestui limbaj de programare. Dacă doriți să fiți dezvoltator Java, ar trebui să fiți conștienți de aceste concepte de bază.
Zona colecțiilor Java este extrem de largă și multe întrebări pot fi adresate într-un interviu. Aici am colectat o listă cu cât mai multe întrebări relevante pe care vi le-ați putea pune în interviu.
=> Verificați aici pentru a vedea A-Z a tutorialelor de instruire Java aici
Ce veți învăța:
Întrebări de interviuri despre colecțiile Java
Q # 1) Explicați Java Collections Framework.
Răspuns: Java Collections Framework este o arhitectură care ajută la gestionarea și stocarea unui grup de obiecte. Cu aceasta, dezvoltatorii pot accesa structuri de date preambalate și pot manipula date și cu ajutorul algoritmilor.
Colecția Java include interfața și clasele, care acceptă operațiuni precum căutarea, ștergerea, inserarea, sortarea etc. Alături de interfață și clase, Colecțiile Java includ și algoritmi care ajută la manipulări.
Q # 2) Care sunt beneficiile colecțiilor Java?
Răspuns:
Avantajele colecțiilor Java sunt:
- În loc să implementeze clasele noastre de colectare, folosește clasele de colectare de bază, reducând astfel efortul necesar dezvoltării sale.
- Folosește clasele cadrului de colecție care sunt bine testate. Prin urmare, calitatea codului său este îmbunătățită.
- Reduce efortul de întreținere a codului.
- Java Collection Framework este interoperabil și reutilizabil.
Î. 3) Ce știți despre Ierarhia colecțiilor din Java?
Răspuns:
[imagine sursă ]
Q # 4) Spuneți-ne despre interfețele de bază ale colecției Java.
Răspuns:
Mai jos sunt prezentate interfețele de bază ale Java Collection Framework.
Colectie: Este baza ierarhiei Colecției și reprezintă elementele sale. Cu toate acestea, Java nu oferă nicio aplicație directă a colecției. De asemenea, majoritatea colecțiilor Java provin din această interfață.
A stabilit: Nu poate conține elemente duplicate, deoarece modelează abstractizarea setului matematic. După cum sugerează și numele, reprezintă seturi, de exemplu, un pachet de cărți.
Listă: Poate conține elemente duplicat și este o colecție comandată. Puteți utiliza indexul acestuia pentru a accesa orice element din acesta. Lista este ca un aranjament, o matrice, cu o lungime dinamică.
Acestea sunt câteva interfețe ale Java Collection. Cu toate acestea, mai există câteva interfețe, precum și cele prezentate mai jos.
- Coadă
- Scoateți
- Iterator
- Iterabil
- SortedSet
- ListIterator.
Q # 5) De ce interfețele serializabile și clonabile nu sunt extinse de colecție Interfață?
Răspuns: Sarcina interfeței de colecție este de a specifica un grup de obiecte numite elemente. Implementarea colecțiilor decide cum vor fi menținute elementele. De exemplu, implementările List permit elemente duplicate, dar implementările Set nu.
Multe implementări au o metodă de clonare publică. Dar nu este practic să o includeți în toate implementările colecției, deoarece colecția este abstractă și implementarea este tot ceea ce contează.
Semnificația și ramificațiile atât serializării, cât și clonării au sens în timp ce se lucrează cu implementările de fond. Prin urmare, depinde de implementarea efectivă să decidă dacă poate fi serializat sau clonat și cum.
Aflați mai multe = >> Interfață Marker în Java: Serializabilă și clonabilă
De aceea, introducerea serializării și clonării în fiecare implementare nu este foarte flexibilă și este restrictivă.
Q # 6) Ce înțelegeți de Iterator în Java Collection Framework?
Răspuns: În tablourile simple, putem folosi bucle pentru a accesa fiecare element. Atunci când este necesară o abordare similară pentru a accesa elementele dintr-o colecție, alegem iteratori. Iterator este o construcție utilizată pentru a accesa elementele obiectelor de colecție.
În Java, Iteratorii sunt obiectele care implementează interfața „Iterator” din Collection Framework. Această interfață face parte din pachetul java.util.
Unele dintre caracteristicile Iteratorilor sunt:
- Iteratorii sunt folosiți pentru a traversa obiectele Colecției.
- Iteratorii sunt cunoscuți sub numele de „Cursor Java universal”, deoarece putem folosi același Iterator pentru toate colecțiile.
- Iteratorii oferă operații „Citiți” și „Eliminați” în afară de parcurgerea colecțiilor.
- Deoarece sunt universale și funcționează cu toate colecțiile, Iteratorii sunt mai ușor de implementat.
Listează întrebările despre colecția Java
Q # 7) Sunteți conștienți de utilizările interfeței List?
[imagine sursă ]
Răspuns: Scopul interfeței Listă este menținerea ordinii inserării. De asemenea, permite stocarea de valori duplicat.
Ajută la buna manipulare a elementelor, în funcție de indexul său, cu diferitele metode pe care le conține. ArrayList, Vector, Stack și LinkedList sunt diferitele clase care implementează interfața listă.
Q # 8) Ce înțelegeți despre ArrayList în Java?
Răspuns: Implementarea interfeței List este ArrayList. Acesta adaugă dinamic sau elimină elemente din listă și oferă, de asemenea, inserarea de elemente împreună cu accesul pozițional. ArrayList permite duplicarea valorilor și dimensiunea sa poate crește dinamic dacă numărul elementelor depășește dimensiunea inițială.
Q # 9) Cum veți converti o matrice de șiruri într-o ArrayList?
Răspuns: Aceasta este o întrebare de programare la nivel de începător pe care un intervievator o pune pentru a vă verifica cunoștințele despre utilitate.clasele Colecție. Colecția și tablourile sunt cele două clase de utilitate ale cadrului de colecție de care intervievatorii sunt deseori interesați.
Colecțiile oferă anumite funcții statice pentru efectuarea de sarcini specifice pe tipurile de colecție. În timp ce Array are funcții de utilitate pe care le îndeplinește pe tipurile de matrice.
//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);
Rețineți că, în afară de tipul String, puteți utiliza și alte tipuri de matrici pentru a converti în ArrayList.
De exemplu,
//Integer array Integer[] numArray = {10,20,30,40}; //Convert to list using Arrays class asList method List num_List = Arrays.asList(numArray);
Q # 10) Convertiți Array în ArrayList și ArrayList în Array.
Răspuns: Pentru a converti ArrayList în Array, se utilizează metoda toArray () List_object.toArray (nou șir [List_object.size ()])
În timp ce metoda asList () este utilizată pentru conversia Array în ArrayList- Arrays.asList (item). AsList () este o metodă statică în care obiectele List sunt parametrii.
Q # 11) Ce este o LinkedList și câte tipuri sunt acceptate în Java?
[imagine sursă ]
Răspuns: LinkedList este o structură de date cu o succesiune de linkuri în care fiecare link este conectat la linkul următor.
Două tipuri de LinkedList sunt utilizate în Java pentru stocarea elementelor:
- SingleLinkList: Aici, fiecare nod stochează datele nodului împreună cu o referință sau indicatorul către următorul nod.
- Doublly LinkedList: O Dublă LinkedList vine cu referințe duale, o referință la nodul următor și alta pentru nodul anterior.
Q # 12) Ce înțelegeți prin BlockingQueue?
Răspuns: Într-o coadă simplă, știm că ori de câte ori coada este plină, nu mai putem introduce alte elemente. În acest caz, coada oferă pur și simplu un mesaj conform căruia coada este plină și iese. Un caz similar se întâmplă atunci când coada este goală și nu există niciun element de eliminat în coadă.
În loc să ieșim doar când nu se poate face inserarea / eliminarea, ce zici să așteptăm până când putem insera sau elimina elementul?
La aceasta se răspunde printr-o variantă de coadă numită „Coada de blocare” . În coada de blocare, blocarea este activată în timpul operațiunilor de coadă și de coadă ori de câte ori coada încearcă să coadă complet coada sau să coadă o coadă goală.
Blocarea este prezentată în figura următoare.
BlockingQueue
Astfel, în timpul operației de coadă, coada de blocare va aștepta până când un spațiu devine disponibil, astfel încât un element să poată fi inserat cu succes. În mod similar, în operația dequeue coada de blocare va aștepta până când un articol devine disponibil pentru operație.
cum se execută un fișier .swf
Coada de blocare implementează interfața „BlockingQueue” care aparține pachetului „java.util.concurrent”. Ar trebui să ne amintim că interfața BlockingQueue nu permite valoarea nulă. Dacă întâlnește nul, atunci aruncă NullPointerException.
Q # 13) Ce este o coadă prioritară în Java?
Răspuns: O coadă prioritară în Java este similară cu structurile de date în stivă sau în coadă. Este un tip de date abstract în Java și este implementat ca o clasă PriorityQueue în pachetul java.util. Coada de prioritate are o caracteristică specială, că fiecare element din coada de prioritate are o prioritate.
Într-o coadă de prioritate, un element cu prioritate mai mare este serverul dinaintea elementului cu prioritate mai mică.
Toate articolele din coada de prioritate sunt comandate conform ordonării naturale. De asemenea, putem comanda elementele în funcție de ordinea personalizată, oferind un comparator în momentul creării unui obiect de coadă prioritar.
Setați întrebări pentru interviul interfeței
Q # 14) La ce folosește Set Interface? Spuneți-ne despre clasele care implementează acest lucru Interfață.
Răspuns: Interfața setului este utilizată în teoria seturilor pentru a modela setul matematic. Este similar cu interfața List și totuși este puțin diferit de acesta. Set Interface nu este o colecție comandată, prin urmare, nu există nicio comandă păstrată atunci când eliminați sau adăugați elementele.
În principal, nu acceptă elemente duplicate, astfel încât fiecare element din Set Interface este unic.
De asemenea, permite comparații semnificative ale instanțelor Set chiar și atunci când există implementări diferite. De asemenea, prevede un contract mai substanțial asupra acțiunilor operațiunilor de egal și hashCode. Dacă două exemple au aceleași elemente, atunci ele sunt egale.
Din toate aceste motive, Set Interface nu are operațiuni bazate pe indexuri de elemente, cum ar fi List. Folosește doar metode moștenite de interfața de colectare. TreeSet, EnumSet, LinkedHashSet și HashSet implementează Set Interface.
Q # 15) Vreau să adaug un element nul la HashSet și TreeSet. Pot sa?
Răspuns: Nu puteți adăuga niciun element nul în TreeSet deoarece folosește NavigableMap pentru stocarea elementelor. Dar puteți adăuga doar unul la HashSet. SortedMap nu permite cheile nule, iar NavigableMap este subsetul său.
De aceea nu puteți adăuga un element nul în TreeSet, acesta va veni cu NullPointerException de fiecare dată când încercați să faceți acest lucru.
Q # 16) Ce știți despre LinkedHashSet?
Răspuns: LinkedHashSet este subclasa HashSet și impune setarea interfeței. Ca formă ordonată de HashSet, gestionează o Listă dublă legată de-a lungul tuturor elementelor pe care le conține. Păstrează ordinea de inserare și, la fel ca clasa sa părinte, poartă doar elemente unice.
Q # 17) Vorbiți despre modul în care HashSet stochează elemente.
Răspuns: HashMap stochează perechile de valori-cheie, dar cheile ar trebui să fie unice. Această caracteristică a Hărții este utilizată de HashSet pentru a vă asigura că fiecare element este unic.
Declarația Hărții din HashSet apare așa cum se arată mai jos:
private transient HashMapmap; //This is added as value for each key private static final Object PRESENT = new Object();
Elementele stocate în HashSet sunt stocate ca o cheie în hartă și obiectul este prezentat ca valoare.
Q # 18) Explicați metoda EmptySet ().
Răspuns: Metoda Emptyset () elimină elementele nule și returnează setul gol neschimbabil. Acest set imuabil este serializabil. Declarația de metodă a Emptyset () este- public static final Set emptySet ().
Întrebări de interviuri cu interfața hartă
Q # 19) Spuneți-ne despre interfața hartă.
Răspuns: Map Interface este conceput pentru căutări mai rapide și stochează elementele sub formă de perechi de valori-cheie. Deoarece fiecare cheie este unică aici, se conectează sau se mapează la o singură valoare. Aceste perechi de valori-cheie se numesc intrări pe hartă.
În această interfață, există semnături ale metodelor pentru regăsire, inserare și eliminare a elementelor, în funcție de cheia unică. Acest lucru îl face un instrument perfect pentru cartografierea asociațiilor cheie-valoare, cum ar fi un dicționar.
Q # 20) Harta nu extinde interfața de colectare. De ce?
Răspuns: Interfața de colectare este acumularea de obiecte și aceste obiecte sunt stocate structural cu mecanismul de acces specificat. În timp ce interfața Hartă urmează structura perechilor cheie-valoare. Metoda de adăugare a interfeței de colectare nu acceptă metoda put a interfeței Map.
De aceea, Map nu extinde interfața de colectare, dar totuși, este o parte importantă a Java Collection Framework.
Q # 21) Cum funcționează HashMap în Java?
Răspuns: HashMap este o colecție bazată pe hartă și articolele sale constau în perechi cheie-valoare. Un HashMap este de obicei notat cu sau. Fiecare element hashmap poate fi accesat folosind cheia sa.
Un HashMap funcționează pe principiul „Hashing”. În tehnica de hash, un șir mai lung este transformat într-un șir mai mic printr-o „funcție hash” care nu este altceva decât un algoritm. Șirul mai mic ajută la căutarea mai rapidă și indexarea eficientă.
Q # 22) Explicați IdentityHashMap, WeakHashMap și ConcurrentHashMap.
Răspuns:
IdentityHashMap seamănă mult cu HashMap. Diferența este că, comparând elemente, IdentityHashMap folosește egalitatea de referință. Nu este o implementare hartă preferată și, deși execută interfața hartă, nu respectă intenționat contractul general al hărții.
Deci, atunci când se compară obiecte, acest lucru autorizează utilizarea metodei egale. Este conceput pentru utilizare în cazuri rare în care este nevoie de o semantică de egalitate de referință.
WeakHashMap Implementarea stochează doar referințe slabe la cheile sale. Acest lucru permite colectarea gunoiului unei perechi cheie-valoare atunci când nu mai există referință a cheilor sale în afara WeakHashMap.
Este utilizat în principal cu acele obiecte cheie în care testul pentru identitatea obiectului este efectuat prin metodele sale egale folosind operatorul ==.
ConcurrentHashMap implementează atât interfețe ConcurrentMap, cât și interfețe serializabile. Este versiunea îmbunătățită și îmbunătățită a HashMap, deoarece nu funcționează bine cu mediul multithread. În comparație cu HashMap, acesta are o rată de performanță mai mare.
Q # 23) Care este calitatea unei chei bune pentru HashMap?
Răspuns: Înțelegând cum funcționează HashMap, este ușor de știut că acestea depind în principal de metode egale și hashCode ale obiectelor cheie. Deci, o cheie bună trebuie să furnizeze același hashCode, iar și iar, indiferent de momentul în care este preluat.
În același mod, în comparație cu metoda egală, aceleași chei trebuie să returneze adevărate și chei diferite trebuie să returneze false. De aceea, se spune că cel mai bun candidat pentru tastele HashMap este clasele imuabile.
Q # 24) Când puteți utiliza TreeMap?
[imagine sursă ]
Răspuns: TreeMap, ca formă specială a HashMap, menține în mod implicit ordonarea tastelor „ordonare naturală”, ca ceva care lipsește în HashMap. Îl puteți folosi pentru sortarea obiectelor cu o anumită cheie.
De exemplu, dacă doriți să implementați și să imprimați un dicționar în ordine alfabetică, puteți utiliza TreeMap împreună cu TreeSet. Se va sorta automat. Desigur, ai fi putut face asta și manual, dar munca se va face mai eficient cu utilizarea TreeMap. De asemenea, îl puteți utiliza dacă accesul aleatoriu este vital pentru dvs.
Diferența dintre întrebări
Q # 25) Care este diferența dintre colecție și colecții?
Răspuns:
Colectie | Colecții |
---|---|
Nu putem folosi ListIterator pentru a traversa un set. | ListIterator poate parcurge Lista în orice direcție. |
Este o interfață. | Este clasă. |
Colecția reprezintă un grup de obiecte ca o singură entitate. | Colecțiile definesc diferite metode de utilitate pentru obiecte de colecție. |
Este interfața rădăcină a Collection Framework. | Colecțiile sunt o clasă de utilitate. |
Acesta derivă structurile de date ale cadrului de colectare. | Colecțiile conțin multe metode statice diferite pentru a ajuta la manipularea structurii datelor. |
Q # 26) În ce este diferit Array de ArrayList?
Răspuns:
Diferențele dintre Array și ArrayList sunt date mai jos:
Matrice | ArrayList |
---|---|
Matricea este o clasă puternic tastată. | ArrayList este o clasă slab tipărită. |
Matricea nu poate fi redimensionată dinamic, dimensiunea sa este statică. | ArrayList poate fi redimensionat dinamic. |
O matrice nu are nevoie de box și de unboxing a elementelor. | ArrayList are nevoie de box și de unboxing a elementelor. |
Q # 27) Diferențiați între ArrayList și LinkedList.
Răspuns:
ArrayList | LinkedList |
---|---|
ArrayList utilizează matricea dinamică intern pentru stocarea elementelor. | LinkedList implementează lista dublu legată. |
Manipularea ArrayList a elementelor este destul de lentă. | LinkedList își manipulează elementele mult mai repede. |
ArrayList poate acționa doar ca o listă. | LinkedList poate acționa atât ca Listă, cât și ca Coadă. |
Util pentru stocarea și accesarea datelor. | Util pentru manipularea datelor. |
Q # 28) În ce fel este diferit Iterable de Iterator?
Răspuns:
Iterabil | Iterator |
---|---|
Este interfața pachetului Java.lang. | Este interfața pachetului Java.util. |
Oferă o singură metodă abstractă cunoscută sub numele de Iterator. | Vine cu două metode abstracte - hasNext și next. |
Reprezintă o serie de elemente care pot fi parcurse. | Indică obiecte cu stare de iterație. |
Q # 29) Indicați diferențele dintre Set și List.
Răspuns:
A stabilit | Listă |
---|---|
Set instrumente Set interfata. | Lista implementează interfața Listă. |
Set este un set de elemente neordonate. | Lista este un set ordonat de elemente. |
Setul nu menține ordinea elementelor în timpul inserării. | Lista păstrează ordinea elementelor în timpul inserării. |
Setul nu permite duplicarea valorilor. | Lista permite valori duplicate. |
Setul nu conține nicio clasă veche. | Lista conține Vector, o clasă veche. |
Setul permite o singură valoare nulă. | Nu există restricții privind numărul de valori nule din Listă. |
Q # 30) Care este diferența dintre Coadă și Stack?
Răspuns:
Coadă | Grămadă |
---|---|
Coada funcționează pe principiul abordării First-In-First-Out (FIFO). | Stack funcționează pe baza Last-In-First-Out (LIFO). |
Inserarea și ștergerea în coadă au loc la capete diferite. | Inserarea și ștergerea se efectuează de la același capăt numit partea de sus a stivei. |
Enqueue este denumirea Insertion, iar dequeue este ștergerea elementelor. | Push este inserție și Pop este ștergerea elementelor din Stack. |
Are două indicații - unul către primul element al listei (din față) și unul către ultimul (din spate). | Are un singur indicator care indică elementul de sus. |
Q # 31) În ce fel sunt SinglyLinkedList și DoublyLinkedList diferite unul de celălalt?
Răspuns:
Listă legată individual | Lista dublă legată |
---|---|
Fiecare nod al listei legate individual constă dintr-o dată și un pointer către nodul următor. | O listă dublă legată constă din date, un indicator către nodul următor și un indicator către nodul anterior. |
Lista cu legături individuale poate fi parcursă folosind următorul indicator. | O listă dublă legată poate fi parcursă utilizând atât indicatorul anterior, cât și cel următor. |
Lista cu legături individuale ocupă mai puțin spațiu comparativ cu o listă cu legături duble. | Lista dublă legată ocupă mult spațiu de memorie. |
Accesul la elemente nu este foarte eficient. | Accesul la elemente este eficient. |
Q # 32) În ce este diferit HashMap de HashTable?
Răspuns:
HashMap | HashTable |
---|---|
HashMap moștenește clasa AbstractMap | HashTable moștenește clasa Dicționar. |
HashMap nu este sincronizat. | HashTable este sincronizat. |
HashMap permite mai multe valori nule, dar o singură cheie nulă. | HashTable nu permite o valoare sau o cheie nulă. |
HashMap este mai rapid. | HashTable este mai lent decât HashMap. |
HashMap poate fi parcurs de Iterator. | HashTable nu poate fi parcurs folosind iteratorul sau enumeratorul. |
Q # 33) Enumerați diferența dintre ArrayList și Vector.
Răspuns:
ArrayList | Vector |
---|---|
ArrayList nu este sincronizat. | Vectorul este sincronizat. |
ArrayList nu este o clasă veche. | Vectorul este o clasă de moștenire. |
ArrayList crește dimensiunea cu jumătate din ArrayList atunci când un element este introdus dincolo de dimensiunea sa. | Vectorul își mărește dimensiunea cu dublu când un element este introdus dincolo de dimensiunea sa. |
ArrayList nu este sigur pentru fire | Vectorul este sigur. |
Q # 34) În ce fel FailFast este diferit de Failsafe?
Răspuns:
FailFast | FailSafe |
---|---|
În timp ce iterați, nu este permisă nicio modificare a unei colecții. | Permite modificarea în timp ce iterați. |
Folosește colecția originală pentru traversare. | Folosește o copie a colecției originale. |
Nu este necesară memorie suplimentară. | Are nevoie de memorie suplimentară. |
Aruncă ConcurrentModificationException. | Nu este aruncată nicio excepție. |
Concluzie
Aceste întrebări de interviuri Java Collections vă vor ajuta să vă pregătiți pentru interviu. Pregătirea dvs. pentru interviul Java Collections trebuie să fie profundă și extinsă, așa că studiați aceste întrebări și înțelegeți bine conceptul.
Aceste întrebări nu numai că vă testează cunoștințele, ci și prezența mintii.
=> Urmăriți aici seria de antrenament Java simplă
Lectură recomandată
- Tutorial JAVA pentru începători: peste 100 de cursuri video Java practice
- Noțiuni de bază Java: Sintaxă Java, Java Class și concepte de bază Java
- Întrebări și răspunsuri la interviu
- Întrebări și răspunsuri la interviuri de testare ETL
- 30 de întrebări și răspunsuri de top pentru interviuri HTML [LISTA 2021]
- Top 30+ Întrebări și răspunsuri populare la interviu cu Castravete
- Top 40 Întrebări și răspunsuri pentru interviuri Java 8 [Cele mai importante]
- Top 30 întrebări și răspunsuri la interviu SAS