Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Comparing Objects with Equals and Hashcode method

Comparing Objects with Equals and Hashcode method

We’ll introduce two methods that closely belong together: equals() and hashCode(). We’ll focus on their relationship with each other, how to correctly override them, and why we should override both or neither.

The Object class defines both the equals() and hashCode() methods – which means that these two methods are implicitly defined in every Java class, including the ones we create:

public class Student {

private int rollno;

private String name;

 public Student(int rollno, String name) 

  {

    this.rollno = rollno;

    this.name = name;

  }

@Override

 public String toString() {

    return “Student [rollno=” + rollno + “, name=” + name + “]”;

  }

}

public class HashMapDemo {

  public static void main(String[] args) {

    HashSet stu = new HashSet(); 

    stu.add(new Student(100,”Abdul”));

    stu.add(new Student(101,”Raju”));

    stu.add(new Student(102,”Atish”));

    stu.add(new Student(100,”Abdul”));

    stu.add(new Student(104,”Jenish”));

    for(Student s:stu)

    {

      System.out.println(s);

    } 

  }

}

Result : still we found duplicate

Student [rollno=102, name=Atish]

Student [rollno=104, name=Jenish]

Student [rollno=100, name=Abdul]

Student [rollno=101, name=Raju]

Student [rollno=100, name=Abdul]

In the above result still we get duplicate, even we use HashSet Mechanism, in that scenario we need to override equals and hashcode method

  1. Equals method what it does is, it will do field to field comparison
  2. Hashcode method what it does is, it will give same hash code to the object whose value in the object are same.

public class Student {

private int rollno;

private String name;

public Student(int rollno, String name) 

{

    this.rollno = rollno;

    this.name = name;

}

@Override

public int hashCode() {

    final int prime = 31;

    int result = 1;

    result = prime * result + ((name == null) ? 0 : name.hashCode());

    result = prime * result + rollno;

    return result;

}

@Override

public boolean equals(Object obj) {

    if (this == obj)

        return true;

    if (obj == null)

        return false;

    if (getClass() != obj.getClass())

        return false;

    Student other = (Student) obj;

    if (name == null) {

        if (other.name != null)

            return false;

    } else if (!name.equals(other.name))

        return false;

    if (rollno != other.rollno)

        return false;

    return true;

}

@Override

public String toString() {

    return “Student [rollno=” + rollno + “, name=” + name + “]”;

}

}

public class HashMapDemo {

 public static void main(String[] args) {

        HashSet stu = new HashSet(); 

        stu.add(new Student(100,”Abdul”));

        stu.add(new Student(101,”Raju”));

        stu.add(new Student(102,”Atish”));

        stu.add(new Student(100,”Abdul”));

        stu.add(new Student(104,”Jenish”));          

        for(Student s:stu)

        {

            System.out.println(s);

        }   

    }

}

Result – (After overriding the equals and hashcode method now there is no duplicate object present)

Student [rollno=102, name=Atish]

Student [rollno=100, name=Abdul]

Student [rollno=104, name=Jenish]

Student [rollno=101, name=Raju]

Note: As per the Java documentation, both the methods should be overridden to get the complete equality mechanism; using equals() alone is not sufficient. It means, if we override the equals(), we must override the hashcode() method.

The post Comparing Objects with Equals and Hashcode method appeared first on TCDC.



This post first appeared on Technology Career Development Center, please read the originial post: here

Share the post

Comparing Objects with Equals and Hashcode method

×

Subscribe to Technology Career Development Center

Get updates delivered right to your inbox!

Thank you for your subscription

×