Junior — Middle
Šta će se desiti ako u HashMap ubacite dva ključa sa istim hash kodom, ali različitim vrednostima prema equals?
sobes.tech АИ
Одговор од АИ
U HashMap-u u Javi, ključevi se čuvaju u bucket-ovima indeksiranim po hash kodu. Ako dva ključa imaju isti hash kod, oni padaju u isti bucket, ali za određivanje jedinstvenosti koristi se metoda equals.
Ako ubacite dva ključa sa istim hash kodom, ali koji nisu jednaki prema equals, HashMap će sačuvati oba ključa kao različite zapise u istom bucket-u.
Primer:
Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, ali !key1.equals(key2)
map.put(key1, "value1");
map.put(key2, "value2");
System.out.println(map.size()); // 2
Dakle, isti hash kod ne znači iste ključeve. HashMap prvo traži u bucket-u po hash-u, a zatim poredi ključeve putem equals. Ako equals vrati false, ključ se smatra novim i dodaje u kolekciju.