How to Store unique objects to avoid the duplicates in java Set?
Asked Answered
S

4

5

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

For example

Consider Employee object which (Employee Id, name, salary....)

list of employee of objects need to add in the Set. We need to restrict the Set for the duplicate elements which need to identify by the "Employee Id.

What are the best way's to do?

Sikata answered 8/10, 2012 at 7:4 Comment(0)
N
19

If you are using an implementation of a java.util.Set, it should not allow duplicates as long as your equals and hashCode methods are implemented properly. Not sure why you have hashmap and hashtable as tags on your question though. Maybe you should rephrase your question and add the code that gives you issues?

Edit: considering your edit:

If you use a Set, your Employee should have the following methods:


    @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;
      }
Nonbelligerent answered 8/10, 2012 at 7:10 Comment(0)
P
2

Similarly to @Dirk, you can also use HashCodeBuilder and EqualsBuilder from org.apache.commons.

It would look like this:

@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(name, employee.name)
                .append(salary, employee.salary)
                .isEquals();
    } else {
        return false;
    }
}
Paviour answered 8/10, 2018 at 13:23 Comment(0)
M
1

"To Store Unique User-Define Object in Set you have to Override explicitly the hashCode and equals method Take example of Student Details"

@Override
public int hashCode(){
   return this.id;
}
@Override
public boolean equals(Object obj)
{
     return this.hashCode==((Student)obj).hashCode();
}
Mistakable answered 30/12, 2023 at 17:27 Comment(0)
R
-4

Set Stores unique object only

Eg:

 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

add will return false when you will try to store the object which is already in the Set

Rayon answered 8/10, 2012 at 7:9 Comment(1)
I understand that Set by default stores unique element. But, if we want to restrict the attribute of the Object level.Sikata

© 2022 - 2025 — McMap. All rights reserved.