java.util.HashMap
имеет реализацию метода put, который имеет следующий код внутри него:
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
В приведенном выше коде почему первая контрольная проверка не была выполнена (поскольку два объекта, имеющие одну и ту же ссылку, будут иметь одинаковый хэш и equals())?
то есть. что-то вроде этого:
if ((k = e.key) == key) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
} else if ( compare hash and equals) {
// do something again with the value
}
Разве это не спасло бы сравнение?