logo

Întrebări și răspunsuri la interviu Java Collections

Cadrul de colecție Java a fost introdus în JDK 1.2 care conține toate clasele și interfețele de colecție. Colecția Java este un cadru care oferă un mecanism de stocare și manipulare a colecției de obiecte. Permite dezvoltatorilor să acceseze structuri de date preambalate și algoritmi pentru manipularea datelor.

În acest articol, am acoperit primele 50 Întrebări de interviu Java Collections și Răspunsuri care acoperă totul, de la conceptele de bază la cele avansate de colecție Java, cum ar fi colecția de navigare, WeakHashMap, fluxurile Lambda etc. Indiferent dacă sunteți un mai proaspăt sau un dezvoltator Java experimentat , aceste întrebări de interviu Java Collections vă oferă toată încrederea de care aveți nevoie pentru a obține următorul interviu Java.



Întrebări de interviu Java Collections

Întrebări de interviu Java Collections

Am împărțit cele 50 de întrebări în două părți: Experimentat și Freshers. Să începem cu întrebările pentru Freshers.

Cuprins



Întrebări de interviu în colecția Java pentru cei care sunt proaspăt

1. Ce este Colectarea în Java?

Termenul Colectie se referă la un grup de obiecte reprezentate ca o singură unitate. Clasele din ierarhia claselor de colecție Java sunt împărțite în două rădăcină interfețe: Colecție (java.util.Colection) și Hartă (java.util.Map) . Termeni pe care îi veți întâlni în timp ce aflați despre colecția în Java:

  • Cadrul de colectare: Cadrul de colecție Java definește clase și interfețe pentru reprezentarea grupurilor de obiecte ca o singură entitate. Dezvoltatorii C++ pot compara cadrul de colectare cu STL (Bibliotecă de șabloane standard) și Container Framework cu Collection Framework dacă provin dintr-un fundal C++.
  • Interfață de colecție: Interfața unei clase specifică ce ar trebui să facă, nu cum. Cu alte cuvinte, este planul pentru clasă. Această interfață oferă cele mai comune metode pentru toate obiectele de colecție care fac parte din Cadrul de colecție. Alternativ, reprezintă obiectul individual ca întreg.
  • Clasa de colecții: Membru al Collection Framework, face parte din pachetul java.util. Obiectul de colecție este prevăzut cu multe metode utilitare în această clasă.

2. Ce este un cadru în Java?

Cadrele sunt seturi de clase și interfețe care oferă o arhitectură gata făcută. Nu este necesar să se definească un cadru pentru a implementa noi caracteristici sau clase. Ca rezultat, un design optim orientat pe obiecte include un cadru care conține o colecție de clase care îndeplinesc toate sarcini similare. Cadrul poate fi utilizat într-o varietate de moduri, cum ar fi apelând metodele sale, extinzându-l și furnizând apeluri inverse, ascultători și alte implementări. Unele dintre cadrele populare din Java sunt:

  • Arc
  • Hibernează
  • Struts
  • Google Web Toolkit (GWT)
  • JavaServer Faces (JSF)

3. Care este diferența dintre Array și Collection în Java?

Matricele sunt o colecție de variabile de tip similar cu un nume comun în Java. Există unele diferențe între matrice în Java și C/C++. Pe de altă parte, Colecțiile sunt grupuri de obiecte individuale care formează o singură entitate cunoscută sub numele de colecție de obiecte.



Matrice

Colectie

Matricele sunt fixe în dimensiune, adică odată ce creăm o matrice, nu putem crește sau reduce în funcție de cerințele noastre. Colecția este extinsă în natură și se bazează pe cerințele noastre. Putem crește sau micșora dimensiunea.
În ceea ce privește memoria, matricele nu sunt recomandate pentru utilizare. În ceea ce privește memoria, se recomandă utilizarea colecțiilor.
În ceea ce privește performanța, matricele sunt recomandate pentru utilizare. În ceea ce privește performanța, colecțiile nu sunt recomandate pentru utilizare.
Matricele pot conține doar elemente omogene de tip de date. Colecția poate conține atât elemente omogene, cât și eterogene.

Pentru mai multe informații, consultați articolul - Diferența dintre matrice și colecții în Java

4. Care sunt diferitele interfețe utilizate în Java Collections Framework?

Colecția este cunoscută ca rădăcina ierarhiei colecțiilor. Colecțiile reprezintă grupuri de obiecte cunoscute ca elemente. Platforma java nu oferă nicio implementare directă a acestei interfețe, dar interfața Collection este implementată de clasele List și Set.

  • Interfață de colecție
  • Interfață Listă
  • Setați interfața
  • Interfață coadă
  • Interfața de scoatere din coadă
  • Interfață pentru hartă

5. Explicați ierarhia cadrului Collection în Java.

Toate clasele și interfețele cerute de cadrul de colecție sunt conținute în pachetul de utilitate (java. util). Cadrele de colecție au o interfață numită interfață iterabilă, care permite iteratorului să itereze peste toate colecțiile. Pe lângă această interfață, interfața de colecție principală acționează ca o rădăcină pentru cadrul de colecție. Toate colecțiile extind această interfață de colecție extinzând astfel proprietățile iteratorului și metodele acestei interfețe. Figura următoare ilustrează ierarhia cadrului de colectare.

Ierarhia colecțiilor Java

6. Care sunt avantajele Cadrului de colectare?

Avantajele cadrului de colectare: Deoarece lipsa unui cadru de colectare a dat naștere la setul de dezavantaje de mai sus, următoarele sunt avantajele cadrului de colectare.

  • API consistent: API-ul are un set de bază de interfețe precum Colectie , A stabilit , Listă , sau Hartă , au toate clasele (ArrayList, LinkedList, Vector etc.) care implementează aceste interfețe niste set comun de metode.
  • Reduce efortul de programare: Un programator nu trebuie să-și facă griji cu privire la designul colecției, ci mai degrabă se poate concentra pe cea mai bună utilizare a acesteia în programul său. Prin urmare, conceptul de bază de programare orientată pe obiecte (adică abstracție) a fost implementat cu succes.
  • Mărește viteza și calitatea programului: Mărește performanța prin furnizarea de implementări de înaltă performanță ale structurilor și algoritmilor de date utili, deoarece în acest caz, programatorul nu trebuie să se gândească la cea mai bună implementare a unei structuri de date specifice. El poate folosi pur și simplu cea mai bună implementare pentru a crește drastic performanța algoritmului/programului său.

7. Ce este ArrayList în Java?

ArrayList este o parte a cadrului de colecție Java și este o clasă a pachetului java.util. Ne oferă matrice dinamice în Java. Principalele avantaje ale ArrayList sunt că, dacă declarăm o matrice, atunci este necesar să menționăm dimensiunea, dar în ArrayList, nu este necesar să menționăm dimensiunea ArrayList dacă doriți să menționați dimensiunea, atunci puteți face acest lucru.

Lista de matrice

Imagine a listei de matrice

Pentru mai multe informații, consultați articolul - ArrayList în Java

8. Care este diferența dintre Colecție și Colecții?

Colectie Colecții
Este o interfață. Este o clasă de utilitate.
Este folosit pentru a reprezenta un grup de obiecte individuale ca o singură unitate. Acesta definește mai multe metode utilitare care sunt utilizate pentru a opera la colectare.
Colecția este o interfață care conține o metodă statică din java8. Interfața poate conține și metode abstracte și implicite. Conține doar metode statice.

Pentru mai multe informații, consultați articolul - Colecție vs Colecții în Java cu Exemplu

9. Diferența dintre ArrayList și LinkedList în cadrul de colecție java?

ArrayList vs LinkedList

ArrayList și LinkedList

ArrayList

LinkedList

Această clasă folosește o matrice dinamică pentru a stoca elementele din ea. Odată cu introducerea genericelor, această clasă acceptă stocarea tuturor tipurilor de obiecte. Această clasă folosește o listă dublu legată pentru a stoca elementele din ea. Similar cu ArrayList, această clasă acceptă și stocarea tuturor tipurilor de obiecte.
Manipularea ArrayList durează mai mult din cauza implementării interne. Ori de câte ori eliminăm un element, intern, matricea este parcursă și biții de memorie sunt mutați. Manipularea LinkedList durează mai puțin în comparație cu ArrayList, deoarece, într-o listă dublu legată, nu există conceptul de deplasare a biților de memorie. Lista este parcursă și legătura de referință este schimbată.
Această clasă implementează o interfață Listă. Prin urmare, aceasta acționează ca o listă. Această clasă implementează atât interfața Listă, cât și interfața Deque. Prin urmare, poate acționa ca o listă și un deque.
Această clasă funcționează mai bine atunci când aplicația solicită stocarea datelor și accesarea acestora. Această clasă funcționează mai bine atunci când aplicația solicită manipularea datelor stocate.

Pentru mai multe informații, consultați articolul - ArrayList vs LinkedList în Java

10. Ce este un iterator?

Cadrul Java’s Collection folosește iteratoare pentru a prelua elementele unul câte unul. Acest iterator este universal, deoarece poate fi folosit cu orice tip de obiect Collection. Folosind Iterator, putem efectua atât operații de citire, cât și operații de eliminare. Aceasta este o versiune îmbunătățită a Enumerării cu adăugarea de elemente de eliminare.

La enumerarea elementelor din toate interfețele implementate în cadrul Collection, cum ar fi A stabilit , Listă , Coadă , Despre ce , și toate clasele implementate de Map, trebuie folosit un Iterator. Singurul cursor disponibil pentru întregul cadru de colecție este iteratorul. Folosind metoda iterator() din interfața Collection, puteți crea un obiect iterator.

Sintaxă:

Iterator itr = c.  iterator  ();>

Notă: Aici c este orice obiect Collection. itr este de tip interfață Iterator și se referă la c.

Pentru mai multe informații, consultați articolul - Iteratoare în Java

11. Care este diferența dintre un iterator și o enumerare?

O diferență majoră între iterator și enumerare este că iteratorii au o metodă remove(), în timp ce enumerațiile nu. Astfel, folosind Iterator putem manipula obiecte prin adăugarea și eliminarea acestora din colecții. Deoarece enumerarea poate traversa doar obiecte și le poate prelua, se comportă ca o interfață numai pentru citire.

Pentru mai multe informații, consultați articolul - Diferența dintre iterator și enumerare

12. Care este diferența dintre Listă și Set în Java

O diferență majoră între o listă și un set este că o listă poate conține elemente duplicate, în timp ce un set conține doar elemente unice. Lista este ordonată și menține ordinea obiectului la care sunt adăugate. Setul este neordonat.

Listă

A stabilit

Lista este o secvență indexată. Setul este o secvență neindexată.
Lista permite elemente duplicate Setul nu permite elemente duplicate.
Elementele după poziția lor pot fi accesate. Accesul în poziție la elemente nu este permis.
Pot fi stocate mai multe elemente nule. Elementele nule pot stoca o singură dată.
Implementările listelor sunt ArrayList, LinkedList, Vector, Stack Implementările setului sunt HashSet, LinkedHashSet.

Pentru mai multe informații, consultați articolul - Diferența dintre listă și set în Java

13. Care sunt cele mai bune practici pentru Java Collections Framework?

Iată câteva dintre cele mai bune practici în timpul utilizării Java Collections:

  • Programele ar trebui scrise ca interfețe, nu implementări, astfel încât să putem modifica implementarea mai târziu.
  • Ori de câte ori este posibil, utilizați generice pentru a asigura siguranța tipului și pentru a evita ClassCastExceptions.
  • Alegerea tipului potrivit de colectare in functie de necesitate. De exemplu, dacă dimensiunea este fixă, ar putea dori să folosim un Array peste o ArrayList. Când iterăm peste Hartă, ar trebui să folosim LinkedHashMap. Setul este cel mai bun mod de a evita duplicatele.
  • Utilizați clase imuabile furnizate de JDK ca chei în Map pentru a evita implementarea hashCode() și equals().
  • Pentru a crește lizibilitatea codului, ar trebui să folosim isEmpty() în loc să găsim dimensiunea colecției și să o comparăm cu zero.
  • În loc să scrieți propria implementare, utilizați clasa de utilitate Colecții pentru a obține colecții numai în citire, sincronizate sau goale. Îmbunătățește reutilizarea codului, rezultând în același timp o stabilitate mai mare.

14. Ce este o coadă prioritară în Java?

PriorityQueues sunt folosite pentru a procesa obiecte în funcție de prioritatea lor. Cozile urmează algoritmul First-In-First-Out, dar uneori elementele cozii trebuie procesate în funcție de prioritatea lor, care este locul în care PriorityQueue intră în joc. Cozile prioritare se bazează pe grămezi de prioritate.

Elementele cozii de prioritate sunt ordonate conform ordonării firești, sau printr-un Comparator pus la dispoziție la momentul construirii cozii, în funcție de constructorul utilizat.

Cozi prioritare în Java

Cozi prioritare în Java

Declaraţie:

public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue>

Clasa implementează interfețele Serializable, Iterable, Collection și Queue.

15. Care este diferența dintre List, set și map în java?

Listă

A stabilit

Hartă

Interfața listă permite elemente duplicate

Setul nu permite elemente duplicate.

Harta nu permite elemente duplicate

Lista menține ordinea de inserare.

Setul nu menține nicio ordine de inserare.

De asemenea, harta nu menține nicio ordine de inserare.

Putem adăuga orice număr de valori nule.

Dar în set aproape o singură valoare nulă.

Harta permite cel mult o singură cheie nulă și orice număr de valori nule.

Clasele de implementare a listei sunt Array List și LinkedList.

Clasele de implementare set sunt HashSet, LinkedHashSet și TreeSet.

Clasele de implementare a hărților sunt HashMap, HashTable, TreeMap, ConcurrentHashMap și LinkedHashMap.

Pentru mai multe informații, consultați articolul - Diferența dintre Listă, Set și Hartă în Java

16. Care este diferența dintre Queue și Stack?

Grămadă

Coadă

Stacks funcționează pe principiul LIFO, ceea ce înseamnă că elementul introdus la ultimul va fi primul element care va fi scos. Cozile funcționează pe principiul FIFO, ceea ce înseamnă că elementul introdus primul va fi primul element care va fi scos.
În stive, inserarea și ștergerea au loc numai de sus. În cozi, inserarea are loc în spatele listei, iar ștergerea are loc din partea din față a listei.
Operația de inserare se numește operație de împingere. Operația de inserare se numește operație de coadă.
Operația de ștergere se numește operație pop. Operația de ștergere se numește operație de scoatere din coadă.
Partea de sus a unei stive indică întotdeauna ultimul element din listă, care este singurul indicator folosit pentru a accesa lista. Sunt menținute două pointere pentru accesarea cozilor. Indicatorul frontal indică primul element inserat, iar indicatorul din spate indică ultimul element inserat.

17. Ce este BlockingQueue în Java?

Interfața BlockingQueue în Java este adăugată în Java 1.5 împreună cu diverse alte clase de utilitate concurente precum ConcurrentHashMap, Counting Semaphore, CopyOnWriteArrrayList etc. Interfața BlockingQueue acceptă controlul fluxului (în plus față de coadă) prin introducerea blocării dacă BlockingQueue este plin sau gol.

converti din șir în întreg java

Un fir de execuție care încearcă să pună în coadă un element într-o coadă completă este blocat până când un alt fir de execuție face spațiu în coadă, fie prin scoaterea din coadă a unuia sau mai multe elemente, fie ștergerea completă a cozii. În mod similar, blochează un fir de execuție care încearcă să ștergă dintr-o coadă goală până când alte fire de execuție introduc un articol. BlockingQueue nu acceptă o valoare nulă. Dacă încercăm să punem în coadă elementul nul, atunci acesta aruncă NullPointerException.

Utilizarea BlockingQueue

Blocare coadă în Java

Blocare coadă în Java

Ierarhia BlockingQueue

Ierarhia cozii de blocare în Java

Ierarhia cozii de blocare în Java

Declaraţie:

public interface BlockingQueue extends Queue>

Aici, ȘI este tipul de elemente stocate în Colecție.

Pentru mai multe informații, consultați articolul - Interfața BlockingQueue în Java

18. Ce este hashCode()?

Imagine pentru a demonstra codul hash Java

Imagine pentru a demonstra codul hash Java

Metoda hashCode() returnează valoarea hashcode ca număr întreg. Este definit în clasa Java Object care calculează valorile hash ale obiectelor de intrare date. Valoarea Hashcode este folosită mai ales în colecții bazate pe hashing, cum ar fi HashMap, HashSet, HashTable... etc. Această metodă trebuie să fie suprascrisă în fiecare clasă care înlocuiește metoda equals().

Sintaxa:

public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.>

Pentru mai multe informații, consultați articolul - metodele equals() și hashCode() în Java

19. Distingeți între ArrayList și Vector în cadrul Java Collection.

În interviurile de colectare, această întrebare este pusă frecvent; cu toate acestea, Vector este sincronizat, în timp ce ArrayList nu este. ArrayList este mai rapid decât Vector. Mărimea matricei ArrayList este mărită cu 50% atunci când este necesar, în timp ce capacitatea Vector este dublată ori de câte ori este nevoie.

Lista matrice vs Vector în java

Lista matrice vs Vector în java

ArrayList

Vector

ArrayList nu este sincronizată Vectorul este sincronizat.
Dimensiunea ArrayList este incrementată cu până la 50% din dimensiunea actuală a matricei dacă numărul de elemente depășește capacitatea sa. Dimensiunea ArrayList este incrementată până la 100% din dimensiunea actuală a matricei dacă numărul de elemente depășește capacitatea sa.
ArrayList este rapidă deoarece nu este sincronizată. Vector este mai lent pentru că este sincronizat.
Interfața iteratorului este folosită pentru a traversa elementele O interfață iterator sau Enumerare poate fi folosită pentru a parcurge vectorul.

Pentru mai multe informații, consultați articolul - Vector vs ArrayList în Java

20. Faceți diferența între Iterator și ListIterator.

Iterator

ListIterator

Poate traversa elementele prezente în Collection numai în direcția înainte. Poate traversa elementele prezente în colecție atât în ​​direcția înainte, cât și în cea înapoi.
Ajută la parcurgerea hărții, a listei și a seturilor. Poate parcurge numai List și nu celelalte două.
Indecii nu pot fi obținuți utilizând Iterator. Are metode precum nextIndex() și previousIndex() pentru a obține indici de elemente în orice moment în timp ce parcurgeți Lista.
Nu se pot modifica sau înlocui elementele prezente în colecție Putem modifica sau înlocui elemente cu ajutorul set(E e)

Pentru mai multe informații, consultați articolul - Diferența dintre un Iterator și ListIterator

21. Care este diferența dintre un iterator și o enumerare?

Iterator: Este un iterator universal, deoarece îl putem aplica oricărui obiect Colecție. Folosind un Iterator, putem efectua atât operații de citire, cât și de eliminare.

Sintaxă:

// Here 'c' is any Collection object. itr is of // type Iterator interface and refers to 'c' Iterator itr = c.iterator();>

Enumerare: Enumerarea (sau enumerarea) este un tip de date definit de utilizator. Este folosit în principal pentru a atribui nume constantelor integrale, numele fac un program ușor de citit și întreținut.

Sintaxă:

// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; }>

Iterator

Enumerare

Iteratorul este un cursor universal, deoarece este aplicabil tuturor claselor de colecție. Enumerarea nu este un cursor universal, deoarece se aplică numai claselor vechi.
Iteratorul are metoda remove(). Enumerarea nu are metoda remove().
Iteratorul poate face modificări (de exemplu, folosind metoda remove() care elimină elementul din colecție în timpul traversării). Interfața de enumerare acționează ca o interfață numai pentru citire, nu se poate face nicio modificare în Colecție în timp ce parcurgeți elementele Colecției.
Iteratorul nu este o interfață moștenită. Iteratorul poate fi folosit pentru parcurgerea HashMap, LinkedList, ArrayList, HashSet, TreeMap și TreeSet. Enumerarea este o interfață moștenită care este utilizată pentru traversarea Vector și Hashtable.

Pentru mai multe informații, consultați articolul - Diferența dintre Iterator și Enumerare

22. Care sunt caracteristicile Java Hashmap?

HashMap este similar cu HashTable, dar este nesincronizat. Ne permite să stocăm și cheile nule, dar ar trebui să existe un singur obiect cheie nulă și poate exista orice număr de valori nule. Această clasă nu oferă garanții cu privire la ordinea hărții. Pentru a utiliza această clasă și metodele sale, trebuie să importați java.util. HashMap pachet sau superclasa acestuia.

HashMap în Java

HashMap în Java

Sintaxă:

  public class   HashMap   extends   AbstractMap   implements   Map, Cloneable, Serializable>

Parametri: Este nevoie de doi parametri și anume după cum urmează:

  • Tipul de chei menținute de această hartă (K)
  • Tipul valorilor mapate (V)

Pentru mai multe informații, consultați articolul - HashMap în Java cu exemple

23. Ce sunt interfețele de colecție?

The Colectie interfața este un membru al Java Collections Framework. Este o parte din java.util pachet. Este una dintre interfețele rădăcină ale Ierarhiei de colecții. Interfața Collection nu este implementată direct de nicio clasă. Cu toate acestea, este implementat indirect prin subtipurile sau subinterfețele sale precum Listă, Coadă și Set.

De exemplu, clasa HashSet implementează interfața Set care este o subinterfață a interfeței Collection. Dacă o implementare de colecție nu implementează o anumită operație, ar trebui să definească metoda corespunzătoare pentru a arunca UnsupportedOperationException.

Ierarhia colectării:

Interfață de colecție în Java

Interfață de colecție în Java

24. Explicați interfața cu listă.

Interfață de clasă în Java

Interfață de clasă în Java

În Java, interfața Listă permite utilizatorului să stocheze o colecție ordonată de obiecte. Lista este interfața copil a Collection. În Collection, o listă este o colecție ordonată de obiecte care pot avea valori duplicate. Deoarece List păstrează ordinea de inserare, permite accesul și inserarea pozițională, ceea ce permite, de asemenea, valori duplicate.

Sintaxă:

public interface List extends Collection ;>

Această interfață listă este implementată de diferite clase precum ArrayList, Vector, Stack, etc. Deoarece toate subclasele implementează lista, putem instanția un obiect listă cu oricare dintre aceste clase.

Exemplu:

List al = new ArrayList ();
List ll = new LinkedList ();
Lista v = vector nou ();

Unde T este tipul obiectului

Lista de matrice în Java

Lista de matrice în Java

Clasele care implementează interfața Listă sunt următoarele:

  • ArrayList
  • LinkedList
  • Vector
  • Grămadă

25. Scrieți un program pentru a converti o matrice dată într-o colecție cu metoda asList().

Pentru a converti datele bazate pe matrice în date bazate pe colecție, putem folosi java.util.Arrays clasă. Această clasă oferă o metodă statică asList(T... a) care convertește matricea într-o colecție.

Java




// 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);> >}> }>

mysql introduceți în

>

>

Ieșire

Array input: [Kamlesh, Abhay, Abhishek, Shivansh] Converted elements: [Kamlesh, Abhay, Abhishek, Shivansh]>

26. Faceți diferența între HashSet și HashMap

HashSet

HashMap

HashSet implementează interfața Set HashMap implementează interfața Map
Nu sunt permise duplicate Da sunt permise valori duplicate, dar nu este permisă nicio cheie duplicată
Valorile fictive sunt permise în HashSet. Nu sunt permise valori fictive în HashMap.
Este necesar un singur obiect în timpul unei operații de adăugare 2 Obiectele sunt necesare în timpul unei operații de adăugare
Viteza este comparativ mai mică decât HashMap Viteza este comparativ mai rapidă decât HashSet, deoarece tehnica de hashing a fost folosită aici.
Au o singură valoare nulă O singură cheie nulă și orice număr de valori nule
Metoda Add() este folosită pentru inserare Metoda put () este folosită pentru inserare.

Pentru mai multe informații, consultați articolul - Diferența dintre HashMap și HashSet

27. Faceți diferența între HashSet și HashTable.

HashSet

HashTable

HashSet permite elemente NULL HashTable nu permite elemente NULL.

Nu se garantează că obiectele pe care le introduceți în HashSet vor fi inserate în aceeași ordine. Obiectele sunt inserate pe baza codului lor hash. LinkedHashSet poate fi folosit pentru a menține ordinea.

HashTable nu menține ordinea de inserare.
HashSet nu este sincronizat, dar poate fi sincronizat extern. HashTable este sincronizat.
metoda add() este folosită pentru a insera în HashSet metoda put() este folosită pentru a insera în HashTable

28. Care este dimensiunea implicită a factorului de încărcare în colecția bazată pe hashing?

Pe măsură ce factorul de încărcare crește, capacitatea crește astfel încât complexitatea operațională a HashMap rămâne O(1) dacă raportul elementului curent la capacitatea inițială depășește pragul. Semnificația complexității operaționale a lui O(1) înseamnă că operațiunile de preluare și inserare durează timp constant. Dimensiunea implicită a factorului de încărcare este 0,75 . Capacitatea implicită este calculată prin înmulțirea capacității inițiale cu factorul de sarcină.

Pentru mai multe informații, consultați articolul - Factor de încărcare în HashMap în Java cu exemple

Întrebări de interviu Java Collection pentru cei cu experiență

29. Care este diferența dintre Comparabil și Comparator în Java?

Java oferă două interfețe pentru sortarea obiectelor folosind membrii de date ai clasei:

  • Comparabil
  • Comparator

Comparabil

Comparator

Interfața Comparabil oferă o singură secvență de sortare. Interfața Comparator oferă mai multe secvențe de sortare.
Clasa reală este modificată de o interfață comparabilă Clasa actuală nu este modificată de interfața Comparator.
Metoda compareTo() este folosită pentru sortarea elementelor. Metoda compare() este folosită pentru sortarea elementelor.
Comparabil este prezent în pachetul java.lang Comparatorul este prezent în pachetul java.util

Pentru mai multe informații, consultați articolul - Comparabil vs Comparator în Java

30. Care este diferența dintre fail-fast și fail-safe?

Iteratorii în Java sunt utilizați pentru a itera obiectele Colecție. Iteratorii Fail-Fast aruncă imediat ConcurrentModificationException daca este o modificarea structurală a colecţiei. Modificarea structurală înseamnă adăugarea sau eliminarea oricărui element dintr-o colecție în timp ce un fir iterează peste acea colecție. Iterator pe clasele ArrayList și HashMap sunt câteva exemple de iterator rapid cu eșec.

Eșuează-Rapid Fail-Safe
ConcurrentModificationException este lansată în timpul modificării obiectului în timpul procesului de iterație. Nu se face nicio excepție
Fail-Fast are nevoie de mai puțină memorie în timpul procesului. Iteratorul Fail-Safe necesită mai multă memorie în timpul procesului.
Un obiect clon nu este creat în timpul procesului de iterație. Un obiect clon sau o copie este creat în timpul procesului de iterație.
Fail-Fast nu permite modificarea în timpul procesului de iterație. Fail-Safe permite modificarea în timpul procesului de iterație.
Fail-Fast este rapid, Fail-Safe este puțin mai lent decât eșuarea rapidă.

Exemple:

ArrayList, Vector, HashMap, HashSet etc.

Exemple:

ConcurrentHashMap, CopyOnWriteArrayList etc.

Pentru mai multe informații, consultați articolul - Iteratoare Fail Fast și Fail Safe în Java

31. Scrieți un program pentru a repeta lista folosind expresia lambda.

Iterația se poate face folosind a expresie lambda.

Sintaxă:

list_name.forEach(variable->{//bloc de cod})>>> 

Java


int parseint



// 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); });>>> }> }>

>

Ieșire

Geeks for Geeks>

Pentru mai multe informații, consultați articolul - Iterați prin Listă în Java

32. Ce este IdentityHashMap?

IdentityHashMap implementează interfața Map folosind Hashtable, comparând cheile (și valorile) folosind egalitatea referințelor în loc de egalitatea obiectelor. Această clasă implementează interfața Map, dar încalcă în mod intenționat contractul general al Map, care cere ca obiectele să fie comparate folosind metoda equals(). Această clasă este utilizată atunci când utilizatorul permite compararea obiectelor folosind referințe. Aparține pachetului java.util.

Pentru mai multe informații, consultați articolul - Clasa IdentityHashMap în Java

33. Scrieți un program în Java pentru a afișa conținutul unui HashTable folosind enumerarea.

Clasa hashtable implementează un tabel hash, care mapează cheile la valori. Orice obiect non-null poate fi folosit ca cheie sau ca valoare. Pentru a stoca și a prelua cu succes obiecte dintr-un tabel hash, obiectele utilizate ca chei trebuie să implementeze metoda hashCode și metoda equals. Mai jos este programul pentru afișarea conținutului unui HashTable folosind enumerarea:

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());> >}> >}> }>

>

>

Ieșire

Geeks for Geeks>

34. Scrieți un program în java pentru a obține vizualizarea de colecție a valorilor prezente într-un HashMap.

Clasa HashMap din Java are metoda java.util.HashMap.values() pentru a crea colecții din valorile HashMap. În principiu, returnează o vizualizare de colecție a valorilor HashMap.

Java




// 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());> >}> }>

>

>

Ieșire

Initial Mappings are: {0=Welcome, 1=to, 2=Geeks, 3=4, 4=Geeks} The collection is: [Welcome, to, Geeks, 4, Geeks]>

Pentru mai multe informații, consultați articolul - HashMap values() Metoda în Java

35. Scrieți un program pentru a uni două ArrayList într-o singură ArrayList.

Având în vedere două ArrayLists în Java, sarcina noastră este să ne alăturăm acestor ArrayLists.

Java




// 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);> >}> }>

>

>

Ieșire

ArrayList 1: [Geeks, For, ForGeeks] ArrayList 2: [GeeksForGeeks, A computer portal] Joined ArrayLists: [Geeks, For, ForGeeks, GeeksForGeeks, A computer portal]>

Pentru mai multe informații, consultați articolul - Alăturați două ArrayLists în Java

36. Cum puteți sincroniza o ArrayList în Java?

Folosind metoda Collections.synchronizedList(), ne putem sincroniza colecțiile în Java. SynchronizedList() returnează o listă sincronizată (cu siguranță pentru fire) susținută de o selecție.

Java




// 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());> >}> >}> >}> }>

>

>

Ieșire

Eat Coffee Code Sleep Repeat>

37. Ce este o clasă de proprietăți în Java?

Clasa proprietăți este o subclasă a Hashtable. Clasa de proprietăți stochează o listă de valori a căror cheie este un șir și a căror valoare este, de asemenea, un șir. Proprietățile pot defini alte liste de clase de proprietăți, dar implicit este proprietăți.

Caracteristici ale clasei de proprietăți:

  • Proprietatea este o subclasă a Hashtable.
  • Fișierul Proprietăți este utilizat pentru a stoca și a prelua tipul de date șir pentru o listă de valori în care cheia este un șir și valoarea este, de asemenea, un șir.
  • Dacă lista de proprietăți inițială nu conține o anumită proprietate cheie, va fi căutată în schimb lista de proprietăți implicită.
  • Obiectele pot fi partajate de mai multe fire de execuție fără sincronizare externă.
  • Clasa de proprietăți poate fi utilizată pentru a prelua proprietățile sistemului.

Pentru mai multe informații, consultați articolul - Clasa de proprietăți în Java

38. Ce se va întâmpla dacă utilizați HashMap într-o aplicație Java cu mai multe fire?

Într-un mediu cu mai multe fire de execuție, dacă mai multe fire de execuție modifică structura hărții, cum ar fi adăugarea, eliminarea sau modificarea mapărilor, structura internă de date a HashMap poate fi coruptă și pot exista unele legături lipsă, intrări incorecte și harta în sine poate deveni complet inutil. Astfel, nu ar trebui să utilizați HashMap într-o aplicație concomitentă; în schimb, utilizați ConcurrentHashMap sau Hashtable, care este sigur pentru fire. ConcurrentHashMap include toate metodele Hashtable, precum și concurența completă a recuperărilor și actualizărilor.

Cum a devenit ThreadSafeConcurrentHashMap thread-safe?

  • Clasa java.util.Concurrent.ConcurrentHashMap asigură siguranța firului de execuție prin împărțirea hărții în segmente, ceea ce permite blocarea doar o dată pe segment, adică o dată pentru fiecare fir de execuție.
  • Operația de citire în ConcurrentHashMap nu necesită o blocare.

Pentru mai multe informații, consultați articolul - Cum realizează ConcurrentHashMap siguranța firelor în Java?

39. Ce se va întâmpla dacă două chei diferite ale HashMap returnează același cod hash()?

Când două chei diferite ale HashMap returnează același cod hash, acestea vor ajunge în aceeași găleată; prin urmare, vor avea loc ciocniri. În caz de coliziune, adică indexul a două sau mai multe noduri este același, nodurile sunt unite printr-o listă de legături, adică al doilea nod este referit de primul nod și al treilea de al doilea și așa mai departe.

Pentru mai multe informații, consultați articolul - Funcționarea internă a HashMap în Java

40. Ce este WeakHashMap?

WeakHashMap implementează interfața Map. Spre deosebire de HashMap, WeakHashMap permite colectarea gunoiului chiar dacă obiectul specificat ca cheie nu conține nicio referință, deși este asociat cu WeakHashMap. Cu alte cuvinte, Garbage Collector este mai bun decât WeakHashMap.

Pentru mai multe informații, consultați articolul - Hashmap vs WeakHashMap în Java

41. Ce este UnsupportedOperationException?

În contextul implementărilor API-urilor sau listelor, UnsupportedOperationException este o excepție comună. Excepția este aruncată atunci când operația solicitată nu poate fi efectuată. Această clasă este membru al Java Collections Framework.

Sintaxă:

public class UnsupportedOperationException extends RuntimeException>

Pentru mai multe informații, consultați articolul - UnsupportedOperationException

42. Cum se face o colecție doar pentru citire în Java?

Crearea unei colecții de numai citire implică restricționarea obiectului doar la preluarea datelor și nu adăugarea sau eliminarea datelor. Java are metode diferite pentru diferite tipuri de colecție, cum ar fi unmodifiableCollection(), unmodifiableMap(), ununmodifiableSet(), etc. java.util.Clasa colecții definește toate metodele. Metoda unmodiableCollection() creează o colecție Read-Only. Necesită o referire la clasa Collection. Dacă avem un obiect Set Interface, îl putem folosi ununmodiableSet() pentru a face Numai citire.

Pentru mai multe informații, consultați articolul - Cum să faci o colecție doar pentru citire în Java?

43. Diferența dintre PriorityQueue și TreeSet în Java?

PriorityQueue

TreeSet

PriorityQueue vine în JDK 1.5. TreeSet vine în JDK 1.4.
Structura de date folosită de PriorityQueue este Queue Structura de date folosită de TreeSet este Set.
Elementele duplicat sunt permise. Elementele duplicat nu sunt permise.
Cu excepția elementului rădăcină, restul elementelor nu urmează nicio ordine anume în PriorityQueue. În TreeSet toate elementele rămân în ordinea sortată.
Folosind PriorityQueue, putem prelua cel mai mare sau cel mai mic element în timpul O(1). TreeSet nu oferă o modalitate de a prelua cel mai mare sau cel mai mic element în timpul O(1), dar, deoarece sunt în ordine sortată, primește primul sau ultimul element în timpul O(1).

Pentru mai multe informații, consultați articolul - Diferența dintre PriorityQueue și TreeSet

44. Ce este operatorul diamant în Java?

Operatorii diamant sunt utilizați pentru simplificarea utilizării genericelor atunci când se creează obiecte evitând în același timp avertismentele necontrolate într-un program. Când operatorul Diamond a fost introdus în Java 7, putem crea obiectul fără a menționa tipul generic în partea dreaptă a expresiei, așa cum se arată mai jos.

Sintaxă:

List list = new ArrayList();>

Pentru mai multe informații, consultați articolul - Operator de diamant

45. Cum funcționează TreeMap în Java?

Harta copacului stochează perechile cheie-valoare, dar TreeMap sortează cheile mai degrabă ascendent decât descendent ca HashMap. În funcție de constructorul utilizat, TreeMap va fi sortat fie în funcție de cheile sale, fie de un Comparator. În TreeMap, elementele sunt sortate pe baza unui arbore roșu-negru. Un arbore roșu-negru este un arbore de căutare binar cu auto-echilibrare în care fiecare nod are un bit suplimentar, iar acel bit este adesea interpretat ca culoare (roșu sau negru). Aceste culori sunt folosite pentru a se asigura că arborele rămâne echilibrat în timpul inserărilor și ștergerii.

Structura unui nod în Java

Structura unui nod în Java

Pentru mai multe informații, consultați articolul - Funcționarea internă a TreeMap în Java

46. ​​Enumeră modalitățile de iterare peste Map în java?

Clasa HashMap furnizează interfața Hartă Java prin stocarea datelor în perechi (Cheie, Valoare) și accesarea acestora printr-un index de alt tip. Pentru a utiliza această clasă este necesar să importați java.util.HashMap pachet sau superclasa acestuia.

Există numeroase moduri de a repeta peste HashMap, dintre care 5 sunt enumerate mai jos:

  1. Iterați printr-un set de intrare HashMap folosind iteratoare.
  2. Iterați prin HashMap KeySet folosind Iterator.
  3. Repetați HashMap folosind for-each bucla.
  4. Iterarea printr-un HashMap folosind expresii Lambda.
  5. Buclă printr-un HashMap folosind Stream API.

Pentru mai multe informații, consultați articolul - Cum se repetă HashMap în Java

47. Ce este CopyOnWriteArrayList în Java?

CopyOnWriteArrayList în Java

CopyOnWriteArrayList în Java

JDK 1.5 a introdus o versiune îmbunătățită a ArrayList numită CopyOnWriteArrayList, în care toate modificările (adăugați, setați, eliminați etc) sunt implementate printr-o nouă copie. Poate fi găsit în java.util.concurrent. Este o structură de date creată pentru a fi utilizată într-un mediu concurent. Într-un mediu bazat pe Thread, CopyOnWriteArrayList este destinat citirii frecvente și actualizărilor rare. CopyOnWriteArrayList este o versiune sigură pentru fire a ArrayList.

Pentru mai multe informații, consultați articolul - CopyOnWriteArrayList în Java

48. Ce este EnumMap în Java?

EnumMap este o implementare a interfeței Map specifică tipurilor de enumerare. Clasa EnumMap este membru al Java Collections Framework și nu este sincronizată. Extinde AbstractMap și implementează interfața Map în java. EnumMap aparține pachetului java.util.

Sintaxă:

clasă publică EnumMapextinde AbstractMap implementează Serializabil, Cloneable

// K trebuie să extindă Enum, ceea ce impune cerința ca cheile să fie de tipul de enumerare specificat.

Parametri:

  • Tipul obiectului cheie
  • Tipul obiectului de valoare
EnumMap în Java

EnumMap în Java

Pentru mai multe informații, consultați articolul - Clasa EnumMap în Java

49. Cum funcționează Hashmap intern?

HashMap funcționează pe principiul Hashing. HashMap conține o matrice de Node și Node poate reprezenta o clasă având următoarele obiecte:

  • int hash
  • Tasta K
  • Valoarea V
  • Nodul următor

Funcționarea internă a HashMap:

  • Hashing
  • Găleți
  • Calculul indexului în Hashmap

Pentru mai multe informații, consultați articolul - Funcționarea internă a HashMap în Java

cincizeci. De ce iteratorul în hashmap este considerat ca eșec rapid?

iteratoarele cu eșuare rapidă aruncă imediat excepții de modificare concurente dacă orice fir din exterior încearcă să modifice colecția pe care iterează. Caracteristica fail-fast asigură că iteratorul eșuează imediat dacă detectează că orice modificare a colecției va duce la un comportament anormal în viitor.

Eșuează repede caracteristica asigură că, dacă iteratorul consideră că modificarea colecției ar avea ca rezultat un comportament anormal în orice moment în viitor, eșuează imediat.

Exemplu:

ce este mac os

Java




// 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>);> >}> >}> >}> }>

>

>

Ieșire:

[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)>

Concluzie

Colecții Java este important de înțeles pentru dezvoltatorii sau programatorii Java, deoarece Java este utilizat pe scară largă în diverse industrii. Este important ca dezvoltatorii să aibă o înțelegere solidă a conceptelor de bază ale colecțiilor Java. Java este una dintre cele mai utilizate limbaje în companii de top, cum ar fi Uber , Airbnb , Google , Netflix , Instagram , Spotify, Amazon , etc. Pentru a intra în aceste companii sau în orice alte companii IT, trebuie să stăpâniți aceste întrebări de interviu adresate cel mai adesea Java Collections, pentru a le rezolva evaluarea online și interviul tehnic bazat pe Java.

Dacă doriți să exersați întrebările de codificare, Programe de colectare JAVA poate fi o resursă utilă.

Întrebări de interviu Java Collections – Întrebări frecvente

1. Ce sunt colecțiile din întrebările de interviu Java?

Colecția în Java este un cadru folosit pentru stocarea și manipularea colecțiilor de obiecte.

2. Care sunt cele 4 clase de colecție în Java?

Există multe colecții în Java, dar dintre ele cele mai utilizate colecții sunt:

  1. ArrayList
  2. LinkedList
  3. HashSet
  4. Grămadă

3. Poate HashMap să aibă chei duplicate?

Nu, HashMap nu poate avea chei duplicate. Deoarece HashMap este una dintre colecțiile din Java, stochează valoarea sub formă de cheie-valoare și fiecare cheie are propria sa valoare atașată. Deci, deoarece nicio cheie nu poate avea două valori înseamnă că nu putem avea chei duplicate în HashMap.

4. De ce matricea nu este o colecție?

Matricea nu este o colecție, totul se datorează diferenței de funcționalitate dintre colecții și matrice, dintre care câteva sunt menționate mai jos:

  • Mărimea matricei nu poate fi modificată odată declarată
  • Matricele pot conține doar elemente omogene de tip de date.
  • Matricea poate conține atât tipuri de date primitive, cât și obiecte, în timp ce în colecții este capabilă să dețină numai obiecte wrapper.