Это небезопасно или желательно. Значение, отображаемое клавишей 1, никогда не может быть восстановлено. При выполнении поиска большинство хэш-карт будут делать что-то вроде
Object get(Object key) {
int hash = key.hashCode();
//simplified, ignores hash collisions,
Entry entry = getEntry(hash);
if(entry != null && entry.getKey().equals(key)) {
return entry.getValue();
}
return null;
}
. В этом примере key1.hashcode () теперь указывает на неправильное ведро хеш-таблицы, и вы не сможете получить value1 с ключом.
Если вы сделали что-то вроде
Key key1 = new Key(0, 0);
map.put(key1, value1);
key1.setA(5);
Key key2 = new Key(0, 0);
map.get(key2);
Это также не будет извлекать значение1, так как key1 и key2 уже не равны, поэтому эта проверка
if(entry != null && entry.getKey().equals(key))
не удастся.