HashMap pentru junior-uri

Codul Dan: Care va fi rezultatul compilarea și rularea programului?

În cazul în care clasa de a trece peste metoda hashCode, astfel încât acesta returnează o valoare aleatorie și utilizarea acestei clase de obiecte ca chei într-un HashMap, atunci cum să se comporte într-o colecție?

Dacă modificați metoda hashCode, astfel încât să revină întotdeauna aceeași valoare (4 reveni;) și utilizarea acestei clase de obiecte ca chei într-un HashMap, atunci cum să se comporte într-o colecție?

Aceste întrebări sunt preluate din interviuri pentru postul de dezvoltator Java Junior și începători sunt de multe ori o piatră de poticnire. Deci, în timp ce impresia proaspătă mă grăbesc să împărtășesc cu voi :)

Trebuie doar să știi două puncte în HashMap de lucru:
1) Indicele de celule din tabela hash, care va kozhitsya pereche cheie-valoare este determinată în funcție de key.hashCode (). Ie obținută prin manipularea cheie-hashCode-lea. chei diferite pot fi puse în exact aceeași celulă a tabelului (aceasta se numește o coliziune), apoi celula in sine, ele vor fi plasate într-o listă legată.
2) cheile din HashMap comparate folosind key.equals) metoda (.

În cazul în care o clasă care va fi folosit ca o cheie pentru a trece peste metoda hashCode, astfel încât de fiecare dată când returnează un număr aleator, atunci vom putea combina într-o colecție de obiecte, dar nu le pot ieși de acolo, pentru că în cele mai multe cazuri, căutarea nu va avea loc în acea celulă HashMap în care este stocată valoarea dorită.

În cazul în care hasCode metoda suprascrie că returnează întotdeauna aceeași valoare, atunci vom fi capabili de a obține lodit și obiecte din colecția, dar toate acestea vor fi stocate într-o singură celulă și HashMap se va comporta (în termeni de performanță), ca o listă legată.

Dacă vă place întrebarea, votează pentru el