Întrebări și răspunsuri la interviu Hashmap [Pentru începători și cu experiență]
Publicat: 2020-09-24Clasa java.util.HashMap este de departe una dintre cele mai importante biblioteci ale Java. Rareori există un proiect care este scris în java și nu folosește biblioteca HashMap în implementarea lor. Este modul în care această structură de date este implementată, ceea ce face acest lucru aproape indispensabil pentru orice program legat de Java. HashMap, în definiția sa, este foarte simplu. HashMap este o structură de date care este implementată folosind o abordare foarte tabelară.
Se spune pe bună dreptate că dacă ar exista o singură structură de date, aceasta ar trebui să fie HashMap. Nu numai că este foarte util, ci și foarte eficient în timp. O căutare simplă în HashMap durează doar aproximativ O(1) timp (înseamnă că toate căutările într-un HashMap se fac în timp constant). Veți găsi multe implementări ale HashMap în limbajul de programare Java, cum ar fi HashTable, concurrenthashmaps, etc. Cu toate acestea, dacă sunteți în căutarea unei implementări generale, nu ar trebui să vă îndepărtați de HashMap de bază.
Fiecare dintre aceste implementări ale HashMap vine cu propriile seturi de caracteristici și cazuri de utilizare. Dacă doriți ca ordinea în care ați scris maparea să fie păstrată, ar trebui să căutați să utilizați Linked HashMap. Dacă doriți ca maparea dvs. să fie sortată, atunci ar trebui să utilizați implementarea TreeMap a HashMap, care face sortarea pentru dvs.
Într-o manieră similară, dacă căutați un tabel Hash care se întâmplă să fie thread-safe, care poate fi folosit și într-o aplicație concomitentă, păstrând în același timp scalabilitatea, veți privi un HashMap concurent.
După cum puteți vedea, există diferite moduri în care puteți utiliza HashMap. Pentru a cunoaște cu adevărat importanța HashMap, ar trebui să vedeți întrebările de interviu pentru orice profil de post de inginerie software. Nu veți putea optimiza timpul în mod corespunzător dacă nu știți cum să implementați corect un HashMap. Deci, dacă sunteți programator, nu puteți renunța la a învăța dezavantajele HashMap. Așa că am enumerat mai jos câteva întrebări remarcabile pentru interviul hashmap, care ar trebui să vă ajute să vă pregătiți pentru următorul interviu.
Învață curs de știință a datelor online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.
Cuprins
Întrebări și răspunsuri la interviu Hashmap
Î1. Cum veți folosi metoda put() a HashMap în Java?
Ans. Metoda put() funcționează pur și simplu utilizând principiul cunoscut sub numele de hashing. Ați folosi această funcție pentru a stoca obiectul în cauză în backend (care este o matrice de memorie). Ar trebui să utilizați o altă funcție împreună cu această funcție put() pentru a putea stabili poziția exactă a acestui obiect în backend. Funcția hashcode() este folosită ca funcție de ajutor pentru a pune() în modul descris mai devreme.
Deci, modul în care aceste două funcții funcționează împreună este că merg și caută cheia disponibilă și locația de memorie în backend. Dacă se întâmplă să se ciocnească, atunci obiectul care are ambele valori (adică atât valorile cheii, cât și ale valorii) este apoi adăugat într-o implementare dinamică a unei liste, cunoscută și ca listă legată. Lista de apreciate aici este stocată în locația de memorie, care a fost găsită anterior.
Q2. Care sunt nevoile de bază pe care trebuie să le aibă un obiect pentru a putea fi folosit fie ca cheie, fie ca valoare a unui HashMap?
Ans. Atât cheia, cât și valoarea pe care le folosim în orice HashMap și implementarea sa ar trebui să aibă, de asemenea, aceste două funcții scrise în ele. Numele acestor două funcții este equals() și hashcode(). Funcția care are numele hashcode() este folosită atunci când inserăm valoarea cheii în orice HashMap. În același timp, funcția equals() este apelată numai atunci când încercăm să recuperăm valoarea care a fost deja stocată în HashMap.
Q3. Să spunem că ați pierdut urma cheilor pe care le-ați folosit deja în HashMap. Următoarea cheie pe care doriți să o adăugați este deja prezentă în HashMap. Ce crezi că se va întâmpla în acest caz?
Ans. Dacă simțiți că ar trebui să existe o eroare, nu veți greși dacă nu vorbim despre HashMap. Cu toate acestea, dacă utilizați HashMap și se întâmplă să inserați o cheie a cărei valoare era deja prezentă în hashmap, compilatorul java nu va arunca nicio eroare. În schimb, ceea ce se va întâmpla este că compilatorul va merge și va găsi valoarea asociată cu cheia pe care ați introdus-o și va actualiza doar valoarea acolo.
Dacă utilizați funcția put() pentru a adăuga valoarea în hashmap, valoarea returnată a acestei funcție ar fi valoarea veche asociată cu acea cheie. Deci, să presupunem că pentru cheia A, aveți o valoare stocată de 1. Dacă acum puneți valoarea lui A să fie, să spunem 50, atunci valoarea care va fi returnată de funcția put() va fi 1 , iar valoarea finală stocată în cheia A ar fi 50.
Î4. În cazul în care apare necesitatea stocării unei valori nule. Ai putea folosi HashMap în acest caz?
Ans. Da, am putea folosi hashmap în acest caz fără probleme, deoarece hashmap-urile nu reduc valoarea pe care o puteți stoca. Puteți stoca câte valori nule dorește inima dvs. în orice hashmap.
Î5. Cum se gestionează coliziunea cu implementarea hashmap în Java?
Ans. Biblioteca de cod a java.util.HashMap folosește metoda de înlănțuire pentru a gestiona coliziunile. Modul în care funcționează această înlănțuire este orice intrare nouă în hashmap, care conține atât perechea cheie, cât și valoarea, ar fi stocată într-o listă legată, iar această listă ar fi apoi stocată acolo unde se află datele existente ale hashmap-urilor (locația găleții) .
În cazul în care toate cheile pe care le aveți în hashmap se dovedesc a avea același hashcode, atunci hashmap-ul dvs. nu va mai fi hashmap. Acesta va fi transformat într-o listă legată. Timpul de căutare va crește de ordinul unu (o(1)), adică timp constant, la ordinul lui N (O(N)) care este timp liniar.
Î6. Veți putea stoca o cheie care are o valoare nulă într-o implementare java a hashmap?
Ans. Da, în implementarea hashmap-ului de către Java, veți putea stoca chei cu o valoare nulă. Dar veți putea stoca doar o singură astfel de cheie, care va fi întotdeauna stocată la începutul listei. Hashmap nu va apela funcția hashcode() aici, deoarece dacă acea funcție este utilizată pe o cheie nulă, va genera o eroare Null Pointer Exception. Va trebui să utilizați funcția get în loc să utilizați valoarea nulă ca cheie dacă doriți ca primul index al hashmap-ului să vă fie returnat.

Citiți: Sortare în structura datelor: categorii și tipuri
Î7. Ce structură de date credeți că hashmap este conceput să imite?
Ans. Harta hash ar trebui să imite aspectul și funcționalitatea structurii de date a tabelului hash. Structura de date a tabelului hash este alegerea dvs. ideală dacă doriți să stocați valorile sub forma unei perechi cheie și valoare. Motivul principal pentru care acest tabel hash este preferat este din cauza timpului de căutare. Deci, dacă aveți cheia pe care doriți să o căutați, atunci în ordinea uneia sau a timpului constant, veți putea obține înapoi valoarea dorită.
Î8. Deoarece hashmap nu este una dintre structurile de bază de date, cum ar fi structura sau matricele. Ce crezi că se întâmplă sub capotă ori de câte ori creezi o hartă hash? Ce combinație a structurii de date credeți că ne-a dat hashmap-urile?
Ans. Chiar dacă hashmap reprezintă de fapt un hashtable, dar sub capotă, nu este implementat direct. Folosim două structuri de date binecunoscute pentru a da viață unei hărți hash. Folosim o listă legată și matrice. O listă legată este folosită pentru a stoca perechea cheie și valoare în mod dinamic, iar matricea este folosită pentru a stoca toate aceste liste legate în ele; împreună, formează un hashmap.
Din Java 8, dacă lista legată devine suficient de mare, atunci, în loc de lista legată, Java implementează un arbore de căutare binar. Această modificare este făcută pentru a economisi timp și pentru a îmbunătăți performanța generală a hashmap.
Citiți și: Întrebări de interviu pentru știința datelor
Q9. În cazul în care dorim să stocăm mai multe valori sub aceeași cheie, credeți că va fi posibil în implementarea hashmap prezentă în Java?
Ans. Nu, nu veți putea stoca chei duplicate în hashmap. Dacă încercați să stocați o nouă valoare într-o cheie deja prezentă în hashmap, atunci hashmap va elimina pur și simplu valoarea care a fost stocată anterior în acea cheie și o va înlocui cu cea nouă.
Dimensiunea hashmap-ului, în acest caz, nu s-ar modifica, ceea ce înseamnă că nu va exista nicio adăugare de chei în hashmap. Această caracteristică este unul dintre motivele pentru care folosim funcția keyset() pentru a obține înapoi toate cheile unui hashmap și că această funcție returnează un set și nu o colecție (deoarece într-un set toate valorile trebuie să fie unice).
Q10. Veți putea stoca valori duplicate în HashMap?
Ans. Da, veți putea stoca valori duplicate în hashmap. Acesta este motivul când recuperați toate valorile din hashmap. Apoi, în loc să luăm un set, primim o colecție. Nu dă valoarea sub formă de listă deoarece comandarea nu este garantată.
Q11. În implementarea de către Java a hashmap-ului, este thread-safe?
Ans. Nu, vanilla Hashmap nu este deloc sigură pentru fire în Java. În mod ideal, ar trebui să evitați partajarea hashmap-ului la un fir care poate schimba valoarea și edita hashmap-ul sub orice formă sau formă. Puteți, totuși, să utilizați o hartă hash numai pentru citire și apoi să o introduceți în fir. În acest fel, valorile conținute în ele nu se vor schimba.
Q12. Ce credeți că se va întâmpla dacă vom folosi hashmap într-o aplicație care folosește mai multe fire?
Ans. Dacă se întâmplă să transmiteți un hashmap unei aplicații care utilizează mai multe fire de execuție și fiecare dintre aceste fire de execuție poate modifica, adăuga sau elimina valorile care sunt stocate în hashmap, atunci datele interne prin care a fost construit hashmap-ul ar fi corupte. . Legăturile care au fost folosite pentru a forma hashmap-ul ar dispărea, iar apoi hashmap-ul și-ar pierde structura și scopul său ar fi, de asemenea, pierdut. Prin urmare, este întotdeauna recomandat să utilizați întotdeauna hashmap sigură pentru thread dacă doriți să le utilizați într-o aplicație care este threaded.
Q13. Dacă vrem să repetăm întregul HashMap în Java. Care sunt diferitele moduri în care am putea face asta?
Ans. Există multe moduri în care ați putea să iterați o hartă hash în java; unele dintre ele sunt enumerate mai jos:
- Puteți folosi funcția KeySet cuplată cu o variabilă iterativă.
- Puteți utiliza funcția enterySet cuplată cu o variabilă iterativă.
- Puteți utiliza funcția entrySet și o puteți utiliza cu o buclă îmbunătățită.
- Puteți folosi keySet și obțineți o metodă.
Citiți și: Structuri de date și algoritm în Python: tot ce trebuie să știți
Ce urmează?
Dacă sunteți curios să aflați despre știința datelor, consultați programul Executive PG în știința datelor de la IIIT-B și upGrad, care este creat pentru profesioniști care lucrează și oferă peste 10 studii de caz și proiecte, ateliere practice practice, mentorat cu experți din industrie, 1 -on-1 cu mentori din industrie, peste 400 de ore de învățare și asistență profesională cu firme de top.
Prin ce diferă un Hashtable de un HashMap?
O structură de date nesincronizată este un HashMap. Un hashtable, pe de altă parte, este sigur pentru fire și poate fi partajat în mai multe fire de execuție fără a fi necesar codul de sincronizare. Hashtable nu permite o cheie nulă sau mai multe valori nule, dar HashMap permite. HashMap ar trebui folosit în loc de Hashtable în aplicațiile fără fire. Pur și simplu spus, HashMap ar trebui utilizat în aplicații cu un singur thread sau nesincronizate.
Este mai rapid să utilizați un HashMap sau un TreeMap?
Într-un TreeMap, valorile sunt determinate de cheie. Nu poate avea o cheie nulă, dar poate avea mai multe valori nule. Este identic cu HashMap, cu excepția faptului că, în loc de ordine crescătoare, păstrează ordinea crescătoare (sortat folosind ordinea naturală a cheii sale). HashMap folosește o structură de date bazată pe matrice pentru a-și organiza componentele în funcție de funcția hash ca implementare bazată pe hashtable. Pentru majoritatea operațiunilor precum add(), delete() și contains, HashMap prognozează performanța în timp constant a O(1) (). Ca rezultat, este mult mai rapid decât un TreeMap.
Când este mai bine să folosiți HashMap în loc de ArrayList?
Numai atunci când sunt disponibile chei unice pentru datele pe care dorim să le stocăm, HashMap are sens. Când căutăm lucruri bazate pe o cheie, ar trebui să o folosim, deoarece timpul de acces rapid este o necesitate. Când păstrarea aceleiași ordine a intrărilor într-o colecție este critică, ar trebui să evităm HashMap. Ambele sunt distincte unul de altul și servesc unor scopuri distincte. Dacă doriți să stocați obiecte în Java, utilizați HashMap pentru a mapa cheile la valori și în caz contrar ArrayList.