Если метод хеш-кода основан на поле name
, и вы затем измените его после добавления объекта, то вторая проверка contains
будет использовать новое значение хеш-функции и не найдет объект, которым вы былинаходясь в поиске.Это потому, что HashSet
первый поиск по хеш-коду, поэтому они не будут беспокоиться о вызове equals
, если поиск не удастся.
Единственный способ, которым это будет работать, - это если бы у вас не было переопределено equals
(и поэтому использовалось равенство ссылок по умолчанию) и вам повезло, и хэш-коды двух объектов были равны.Но это действительно маловероятный сценарий, и вы не должны полагаться на него.
В общем, вы никогда не должны обновлять объект после добавления его вHashSet
, если это изменение также изменит свой хеш-код.