Равный & хэш-код в массиве - PullRequest
0 голосов
/ 23 сентября 2018

Мой вопрос заключается в том, почему ArrayList не удаляет дубликаты даже после того, как я внедрил хэш-код & равно в моем пользовательском объекте.

Например: у меня есть объект сотрудника с атрибутом id & name, также я переопределяю hashcode & equalsкак показано ниже

@Override
public int hashCode() {
    return 1;
}

@Override
public boolean equals(Object obj) {

    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Employee other = (Employee) obj;

    if (this.id != other.id)
        return false;
    return true;
}

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

remove удаляет только первое вхождение ( javadoc ):

Удаляет первое вхождение указанного элемента из этого списка, если он присутствует

Если вы не хотите дублировать в первую очередь - вы можете использовать Set .

0 голосов
/ 23 сентября 2018

Списки не предназначены для уникальных значений.Это четко задокументировано в javadocs java.util.List:

В отличие от наборов, списки обычно допускают дублирование элементов.Более формально списки обычно допускают пары элементов e1 и e2, например e1.equals (e2), и они обычно допускают наличие нескольких нулевых элементов, если они вообще допускают нулевые элементы.Не исключено, что кто-то захочет реализовать список, который запрещает дубликаты, генерируя исключения времени выполнения, когда пользователь пытается вставить их, но мы ожидаем, что это использование будет редким.

Если вам нуженколлекция уникальных значений, используйте Set (вы, вероятно, хотите использовать HashSet)

0 голосов
/ 23 сентября 2018

Поскольку List s может содержать повторяющиеся элементы.Если вы не хотите этого, вы должны использовать HashSet s вместо.

...