У меня есть объект MultiKey в качестве ключей для Карты.Java: Карта с типом doubleKey, как сделать правильный hashCode()?
Ключ состоит из имени (строки) и идентификатора (int).
Следующие контракты должны быть заполнены: Ключи должны быть равны, если либо имена обеих ключей равны, либо идентификаторы обоих ключей.
Как мне реализовать функцию hashCode(), чтобы этот контракт не был нарушен? Возможно ли это?
Внедрение равно легко ... я просто положить:
if (name.equals(other.name) || id == other.id)
return true;
Но это не будет работать, потому что HashMap использует только хэш-код(), и не заботится о равных() ...
Пример:
Map A = [ ("tom",1)=TOMAS, ("eli",2)=ELIAS ]
A.get(new Key("tom",0)) should return TOMAS
A.get(new Key("",1)) should return TOMAS
A.get(new Key("eli",2)) should return ELIAS
...
Как насчет 'A.get (новый ключ (" tom ", 2))'? – Tunaki
Нет, это точка. Два ключа должны быть одинаковыми, если либо имена ИЛИ идентификаторы равны – Jan
Я понял, что, но учитывая вашу карту 'A', что' A.get (новый ключ («tom», 2)) 'должен вернуться? – Tunaki