Я понимаю, что использование неизменяемого объекта предпочтительнее. Но как насчет изменяемых объектов с методом hashCode
() по умолчанию (и, конечно, я не переопределяю метод equals
()). Это также должно быть хорошо, поскольку по умолчанию hashCode
() использует адрес памяти объекта?
Есть что-то, что я пропущу здесь?
Пока метод hashCode
и equals
всегда возвращает тот же результат, можно безопасно использовать этот объект в качестве ключа в HashMap
.
Однако вы, вероятно, уменьшаете свою полезность в качестве ключа, делая это! Вся точка equals/hashCode должна идентифицировать равенство между значениями объекта, и если вы изменяете элементы объекта, действительно ли это так, как это было до модификации?
Ниже представлен хеш-код со строкой. Однако проблема, о которой стоит беспокоиться, это возможное изменение реализации ранних/поздних версий Java хеш-кода строки.
public int hashCode()
{
return "name".hashCode();
}
Кроме того, существует вероятность столкновений хеша статьи