Изменяемый объект Java как ключ карты, но с использованием hashCode () по умолчанию

1

Я понимаю, что использование неизменяемого объекта предпочтительнее. Но как насчет изменяемых объектов с методом hashCode() по умолчанию (и, конечно, я не переопределяю метод equals()). Это также должно быть хорошо, поскольку по умолчанию hashCode() использует адрес памяти объекта?

Есть что-то, что я пропущу здесь?

Теги:
hashmap

2 ответа

4
Лучший ответ

Пока метод hashCode и equals всегда возвращает тот же результат, можно безопасно использовать этот объект в качестве ключа в HashMap.

Однако вы, вероятно, уменьшаете свою полезность в качестве ключа, делая это! Вся точка equals/hashCode должна идентифицировать равенство между значениями объекта, и если вы изменяете элементы объекта, действительно ли это так, как это было до модификации?

  • 0
    Привет, Тим, у меня есть метод построителя, который, например, создает объект только с тем же «именем». Таким образом, для данного идентификатора всегда будет один и тот же объект. Изменчивым является только содержимое, связанное с «именем».
0

Ниже представлен хеш-код со строкой. Однако проблема, о которой стоит беспокоиться, это возможное изменение реализации ранних/поздних версий Java хеш-кода строки.

public int hashCode()
{
    return "name".hashCode();
} 

Кроме того, существует вероятность столкновений хеша статьи

Ещё вопросы

Сообщество Overcoder
Наверх
Меню