Mitul unicitatea obiectelor din setul și cheile din harta

1. Un set este o colecție care nu poate conține elemente duplicate [1]

2. O hartă este un obiect care mapează cheile de la valori. O hartă nu poate conține duplicat chei: Fiecare cheie poate mapa la cel mult o valoare. [2]

Cu aceste cuvinte începe manualele de formare a Colecții cadru interfețe adecvate, incluse în setul standard de instrumente Java. Este greu să nu sunt de acord atunci când scrie o sursă de încredere, și totul citează acest fapt. Dar nu uita curbele de mâini, design săraci și alte comportamente necorespunzătoare, care au un loc în lumea modernă de dezvoltare software.

Confruntându-se cu o întrebare interesantă a cerut în interviurile [3], am fost curios să verifice, dar ce se întâmplă cu adevărat atunci când un obiect care îndeplinește funcții-cheie în hartă pentru a schimba? Și cum se va comporta acest caz, atunci când încercați să egaliza numărul de chei?

Este cunoscut faptul că unicitatea Harta chei este verificat pentru egalitate obiecte metoda este egală cu (obj1.equals (obj2) == true), și, de asemenea hashes obiectele de date, de asemenea, să fie identice (obj1.hashCode () == obj2.hashCode ()). Pe această bază, nu este greu de imaginat ce trebuie făcut pentru a pune în mapa un cuplu de trei chei identice pentru valori diferite. Ceea ce am făcut:

După cum se poate observa „date foarte importante 2“ nu este disponibil atunci când încearcă să o obține într-un mod familiar.
De aici concluzia: ca tastele de realizare Harta si Set obiecte implementările pot conține aceleași obiecte. Ceea ce este, de fapt necesar pentru a dovedi. Un lucru era clar, că, după inițializarea obiectele de mai sus nu se mai fac verificări la unicitatea, cu excepția cazului în care, desigur, nu pot fi editate. Dar, în orice caz, obiectele deja existente rămân în locurile lor.

surse: