Являются ли мутабельные ключи hashmap опасной практикой?

Является ли плохой практикой использование изменяемых объектов в качестве ключей Hashmap? Что произойдет, если вы попытаетесь получить значение из Hashmap, используя ключ, который был достаточно изменен, чтобы изменить его хэш-код?

Например, дан

class Key
{
    int a; //mutable field
    int b; //mutable field

    public int hashcode()
        return foo(a, b);
    // setters setA and setB omitted for brevity
}

с кодом

HashMap<Key, Value> map = new HashMap<Key, Value>();

Key key1 = new Key(0, 0);
map.put(key1, value1); // value1 is an instance of Value

key1.setA(5);
key1.setB(10);

Что произойдет, если мы теперь вызовем map.get(key1)? Безопасно ли это или целесообразно? Или поведение зависит от языка?

59
задан Kedar Mhaswade 21 September 2018 в 16:54
поделиться