2016-03-27 4 views
1

Как HashSet1.retainAll(HashSet2); работать за кулисами?Как HashSet1.retainAll (HashSet2); работать за кулисами?

Я добавляю объекты с одинаковыми параметрами к двум различным HashSet, но когда я использую приведенное выше, я, похоже, не получаю правильный результат. I.e он не обнаруживает, что это фактически те же параметры в объекте.

Этот метод выше, сравнивая фактический адрес моих объектов в наборе?

Если да, то как я могу заставить его сравнивать параметры объектов.

Возможно, переопределить равные?

+5

Вам необходимо переопределить методы 'hashCode' и' equals'. – marstran

+0

Спасибо @marstran, отлично поработал. –

+1

Кстати, вам также нужно выполнить контракт двух методов, чтобы он работал должным образом. Если два объекта равны, они также должны иметь один и тот же хэш-код. Однако, если два объекта имеют один и тот же хэш-код, они могут быть не равными (из-за хеш-коллизий). – marstran

ответ

0

Я переписал методы hashCode и .equals в моем классе, и это привело к тому, что метод сравнивал правильный адрес параметра, а не адрес объекта. Спасибо за @marstran за его совет по этому вопросу.