Î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
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
- Întrebări de interviu Java Collection pentru cei cu experiență
Î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.
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 ș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
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.
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
Ierarhia BlockingQueue
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
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
| 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
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
24. Explicați interfața cu listă.
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
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);> > }> }> |
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
// 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); });>>> |