удаление уникальной записи из списка - PullRequest
2 голосов
/ 13 августа 2010

У меня есть список сотрудников. Мой класс сотрудников выглядит следующим образом

public class Employee{
  int empid;
  String name;
  ...
}

Теперь я хочу удалить сотрудника из списка, чей empid равен 5. Один из способов - итерировать список и проверить, не empid == 5. 5. Есть ли другой способ, которым я могу это сделать?

Также необходимо, чтобы в моем списке содержались сотрудники с уникальным empid. Любая попытка добавить сотрудников с дубликатом empid должна вызвать исключение. Как это сделать?

Ответы [ 3 ]

2 голосов
/ 13 августа 2010

Вместо List< Employee> используйте Set< Employee>.Не забудьте переопределить hashCode() и equals() методы вашего класса Employee.

2 голосов
/ 13 августа 2010

Если порядок сотрудников актуален (или если вам нужно, чтобы один сотрудник был представлен несколько раз), вам необходимо сохранить их в списке.(В противном случае набора будет достаточно.)

Я бы позволил Employee переопределить метод equals и использовал бы List.remove(Object o).

Из документов API Списка.:

boolean remove(Object o)Удаляет первое вхождение указанного элемента из этого списка, если он присутствует (необязательная операция).Если этот список не содержит элемент, он не изменяется.Более формально, удаляет элемент с наименьшим индексом i, так что (o == null? Get (i) == null: o.equals (get (i))) (если такой элемент существует).

Конкретно, вы могли бы сделать что-то вроде

public class Employee{

    int empid;
    String name;

    public boolean equals(Object o) {
        if (o == null || !(o instanceof Employee))
            return false;
        Employee e = (Employee) o;
        return empid == e.empid && name.equals(e.name);
    }

    public int hashCode() {
        return empid ^ name.hashCode();
    }
}
0 голосов
/ 13 августа 2010

Для первой части вашего вопроса вы можете вызвать remove (), передав объект Employee, метод equals () которого возвращает true для Employee с идентификатором 5.

Для вашей второй части вместо List, Set гарантирует отсутствие дубликатов. Нужно ли, чтобы ваша коллекция была списком?

...