簡體   English   中英

如何存儲唯一對象以避免java Set中的重復?

[英]How to Store unique objects to avoid the duplicates in java Set?

如何存儲唯一對象以避免java Set中的重復?

例如

考慮 Employee 對象(員工 ID、姓名、薪水....)

對象的雇員列表需要添加到集合中。 我們需要限制需要通過“Employee Id”標識的重復元素的 Set 。

最好的方法是什么?

如果您正在使用java.util.Set的實現,則只要您的equalshashCode方法正確實現,它就不應該允許重復。 不知道為什么你有 hashmap 和 hashtable 作為你的問題的標簽。 也許您應該重新表述您的問題並添加給您帶來問題的代碼?

編輯:考慮您的編輯:

如果您使用Set ,您的 Employee 應該有以下方法:


    @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;
      }

與@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;
    }
}

Set 僅存儲唯一對象

例如:

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM