How does a ArrayList's contains() method evaluate objects?
Как метод ArrayList contains() оценивает объекты?
Допустим, я создаю один объект и добавляю его в свой ArrayList. Если я затем создам другой объект с точно такими же входными данными конструктора, будет ли метод contains() оценивать два объекта как одинаковые? Предположим, что конструктор не делает ничего смешного с входными данными, и переменные, хранящиеся в обоих объектах, идентичны.
Это то, как class должен быть реализован, чтобы иметь contains() return true?
Переведено автоматически
Ответ 1
ArrayList implements интерфейс списка.
Если вы посмотрите на Javadoc для List метода contains, вы увидите, что он использует equals() метод для оценки того, являются ли два объекта одинаковыми.
ArrayList использует метод equals, реализованный в классе (ваш класс case Thing), для выполнения сравнения equals.
Ответ 4
Как правило, вы также должны переопределять hashCode() каждый раз, когда вы переопределяете equals(), даже если просто для повышения производительности. HashCode() решает, в какую "корзину" будет отсортирован ваш объект при выполнении сравнения, поэтому любые два объекта, для которых equal() значение true должно возвращать одинаковое hashCodevalue(). Я не могу вспомнить поведение по умолчанию hashCode() (если он возвращает 0, то ваш код должен работать, но медленно, но если он возвращает адрес, то ваш код завершится ошибкой). Я помню кучу случаев, когда мой код давал сбой, потому что я забывал переопределить hashCode() хотя. :)