Сравнение пользовательских объектов. Как?

 
0
 
Java
ava
smartchecker | 03.10.2013, 16:25
Есть ArrayList из самописных объектов. Нужно получить индекс определённого объекта.

triadList.indexOf(tmpTriad);

Возвращает -1, хотя такой объект точно есть в ArrayList.

Подозреваю, что нужно реализовывать свою процедуру сравнения объектов или что-то дописывать в реализацию объекта.
Направьте.
Comments (4)
ava
LSD | 03.10.2013, 15:35 #
Цитата (smartchecker @  3.10.2013,  16:25 findReferencedText)
Подозреваю, что нужно реализовывать свою процедуру сравнения объектов или что-то дописывать в реализацию объекта.

Правильно подозреваешь. Надо переопределить equals() и hashCode().
ava
smartchecker | 03.10.2013, 15:44 #
Цитата (LSD @ 3.10.2013,  15:35)
Правильно подозреваешь. Надо переопределить equals() и hashCode().

Меня, конечно, на гугле ещё не забанили, но, всё же, что должен делать hashCode()?
ava
LSD | 03.10.2013, 17:03 #
Формальные требования к нему описаны тут (обрати внимание что результаты equals() и hashCode() связанны).

Типовая реализация обычно выглядит так:

    public static class Person {
        private int id;
        private String firstName;
        private String lastName;

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (!(o instanceof Person)) {
                return false;
            }

            Person person = (Person) o;

            if (id != person.id) {
                return false;
            }
            if (firstName != null ? !firstName.equals(person.firstName) : person.firstName != null) {
                return false;
            }
            if (lastName != null ? !lastName.equals(person.lastName) : person.lastName != null) {
                return false;
            }

            return true;
        }

        @Override
        public int hashCode() {
            int result = id;
            result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
            result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
            return result;
        }
    }

и нормальные IDE умеют генерировать эти методы.
ava
Samotnik | 03.10.2013, 22:12 #
Если полей много, то лучше использовать EqualsBuilder и HashCodeBuilder 
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit