0

默认设置不能有重复记录,但假设我有类

class Employee {
   Integer emp_id;
    String name;
   // other fields and their getter 
  Employee(String name) {
       emp_id++;
   this.name=name;
}
}

现在我在我的另一个类中声明了一个集合

       set<Employee> empSet = new HashSet<Employee>();
      Employee e1 = new Employee ("abc");
      Employee e2 = new Employee ("abc");

所以在将它插入到集合中时

      empSet.add(e1);
      empSet.add(e2);

然后第一个 e1 添加到 set 但第二个 e2 返回 false。

现在我想要的是他们的名字没有重复。所以我想在插入集合时检查。

4

3 回答 3

0

您应该重写class 的hashcodeandequals方法。Employee

您可以通过为不同的对象 equals填充不同的方法来确保方法的重复策略。hashcode

查找相同实现的示例

于 2013-03-31T04:37:41.790 回答
0

您可以使用 COMPARATOR 类删除重复项...您必须覆盖比较方法...例如代码请参阅此页面:http: //java2novice.com/java-collections-and-util/treeset/duplicate-objects/

于 2013-03-31T04:39:40.180 回答
0

正如其他用户所提到的,您需要覆盖 Employee 类的 hashCode() 和 equals() 方法,以确定任何两个 Employee 对象是否相等/相同。

以下是示例实现,供您快速理解。这将不允许您将两个同名的 Employee 对象添加到 Set 中。

public class Employee {
static int emp_id;
String name;
// other fields and their getter 
Employee(String name) {
  emp_id++;
  this.name=name;
}

@Override
public int hashCode() {
    int code = name.hashCode();
    return code;
}

@Override
public boolean equals(Object obj) {
Employee empObj = (Employee) obj;
if(empObj.name.equalsIgnoreCase(this.name)) {
      return true;
}
return false;
}
}

希望这会有所帮助。

于 2013-03-31T05:03:05.797 回答