Мой вопрос в том, почему ArrayList не удаляет дубликаты даже после того, как я реализую 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;
}
Ни один из стандартных списков не удаляет дубликаты. Вам нужно использовать HashSet.
Я полностью знаю, что в java docs не говорится, что списки предназначены для удаления дубликатов, но причина, по которой мы используем equals & hashcode, заключается в том, чтобы убедиться, что каждый объект идентифицируется как уникальный. Я также знаю набор, который удаляет дубликаты. Но я хотел понять значение equals & hashcode при использовании с arraylist. И нет необходимости голосовать против, если вы не полностью понимаете вопросы




Потому что List могут содержать повторяющиеся элементы. Если вы этого не хотите, вы можете использовать HashSet.
remove удаляет только первое вхождение (javadoc):
Removes the first occurrence of the specified element from this list, if it is present
Если вам вообще не нужны дубликаты - вы можете использовать Установленный.
Фактически, вы можете вызвать removeAll(Collections.singleton(element)), чтобы удалить все вхождения с написанием цикла.
Списки не предназначены для уникальных значений. Это четко задокументировано в документации java.util.List:
Unlike sets, lists typically allow duplicate elements. More formally, lists typically allow pairs of elements e1 and e2 such that e1.equals(e2), and they typically allow multiple null elements if they allow null elements at all. It is not inconceivable that someone might wish to implement a list that prohibits duplicates, by throwing runtime exceptions when the user attempts to insert them, but we expect this usage to be rare.
Если вам нужен набор уникальных значений, используйте Set (вы, вероятно, захотите использовать HashSet)
Где в документации ArrayList вы читали, что это коллекция, которая удаляет дубликаты? Вы путаете это с HashSet. Обратите внимание, что возвращать постоянное значение в hashCode - ужасная идея.