В хэш-карте будет два объекта, потому что они не equals()
.
Вот доказательство:
public static void main(String[] args) {
Object a = new Object() {
public int hashCode() {
return 1;
}
};
Object b = new Object() {
public int hashCode() {
return 1;
}
};
Map<Object, Object> map = new HashMap<Object, Object>();
map.put(a, a);
map.put(b, b);
System.out.println(map.size());
}
Вывод:
2
Если я добавлю метод equals () следующим образом:
public boolean equals(Object obj) {
return obj.hashCode() == hashCode();
}
Вывод:
1
В соответствии с javadoc для Object.equals () :
Обратите внимание, что обычно необходимо переопределять метод hashCode всякий раз, когда этот метод переопределяется, чтобы поддерживать общий контракт для метода hashCode, в котором говорится, что равные объекты должны иметь одинаковые хеш-коды.
Это не , однако означает, что два объекта, которые не equals()
, не могут использовать один и тот же хэш-код.