Senior
Dva objekta sa equals, istim hashCode, ali različitim identityHashCode — šta će se desiti pri ubacivanju u HashMap?
sobes.tech АИ
Одговор од АИ
Если два объекта равны по equals() и имеют одинаковый hashCode(), но разный identityHashCode(), то при вставке в HashMap они будут рассматриваться как одинаковые ключи.
HashMap использует методы equals() и hashCode() для определения равенства ключей и размещения их в корзинах (buckets). identityHashCode() — это хэш, основанный на адресе объекта в памяти, и он не влияет на работу HashMap.
Следовательно:
- При вставке второго объекта с таким же hashCode и равным equals, он заменит значение, связанное с первым ключом.
- В HashMap не будет двух записей с этими ключами, так как они считаются одинаковыми.
Пример:
Map<Object, String> map = new HashMap<>();
Object key1 = ...; // equals и hashCode совпадают с key2
Object key2 = ...;
map.put(key1, "value1");
map.put(key2, "value2"); // заменит значение для key1
System.out.println(map.size()); // 1
System.out.println(map.get(key1)); // "value2"
Таким образом, identityHashCode не влияет на поведение HashMap, важны только equals и hashCode.