从List中删除唯一记录

时间:2010-08-13 10:35:19

标签: java list unique

我有一份员工名单。我的员工类如下

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

现在我想从empid为5的列表中删除一个员工。一种方法是迭代列表并检查empid是否== 5.还有其他方法可以做到吗?

还希望我的列表包含具有唯一empid的员工。任何尝试添加具有重复empid的员工都应该抛出异常。如何做到这一点?

3 个答案:

答案 0 :(得分:2)

而不是List< Employee>,请使用Set< Employee>。 不要忘记覆盖Employee类的hashCode()equals()方法。

答案 1 :(得分:2)

如果员工的订单具有相关性(或者您需要能够让一名员工多次代表),则需要将其存储在列表中。 (否则一套就足够了。)

我会Employee覆盖equals方法并使用List.remove(Object o)

来自List的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();
    }
}

答案 2 :(得分:0)

对于你的问题的第一部分,你可以调用remove()传入一个Employee对象,其equals()方法为id为5的Employee返回true。

对于您的第二部分,List代替Set,保证不会有任何重复。您的收藏是否有必要成为清单?