如何存储唯一对象以避免java Set中的重复项?

时间:2012-10-08 07:04:56

标签: java hashmap set hashtable

如何存储唯一对象以避免java Set中的重复项?

例如

考虑员工对象(员工ID,姓名,薪水......)

需要在Set中添加对象的员工列表。 我们需要限制需要通过“员工ID”识别的重复元素的Set。

最好的办法是什么?

3 个答案:

答案 0 :(得分:12)

如果您使用java.util.Set的实施,只要您的equalshashCode方法得到正确实施,就不应允许重复。不知道为什么你的问题上有hashmap和hashtable作为标签。也许你应该改写你的问题并添加给你问题的代码?

编辑:考虑您的修改:

如果您使用Set,您的员工应该使用以下方法:

@Override
public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + ((id == null) ? 0 : id.hashCode());
  return result;
}

@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 (id == null) {
      if (other.id != null)
        return false;
    } else if (!id.equals(other.id))
      return false;
    return true;
  }

@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @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 (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; }

答案 1 :(得分:0)

与@Dirk类似,您还可以使用org.apache.commons中的HashCodeBuilder和EqualsBuilder。

它看起来像这样:

@Override
public int hashCode() {
    return new HashCodeBuilder()
            .append(id)
            .append(name)
            .append(salary)
            .toHashCode();
}

@Override
public boolean equals(Object obj) {
    if (obj instanceof Employee) {
        final Employee employee = (Employee) obj;

        return new EqualsBuilder()
                .append(id, employee.id)
                .append(id, employee.name)
                .append(id, employee.salary)
                .isEquals();
    } else {
        return false;
    }
}

答案 2 :(得分:-1)

仅设置存储唯一对象

例如:

 Set set = new HashSet();
 // Add elements to the set
 set.add("a");//true
 set.add("b");//true
 set.add("c");//true
 set.add("d");//true
 set.add("a");//false
当您尝试存储已在Set

中的对象时,

add将返回false