haneef_nb
asked on
what is the use of overriding hashCode() in java?
Hi All,
while comparing two objects we need over ride the hashCode() method in java, Please explain me in detail, why we need to over ride that method.
while comparing two objects we need over ride the hashCode() method in java, Please explain me in detail, why we need to over ride that method.
http://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java
The idea is so that it behaves properly in the Map classes. Each difference object should produce not only a unique hashcode, but one that makes sense with its purpose and internal structure
http://www.technofundo.com/tech/java/equalhash.html
http://www.technofundo.com/tech/java/equalhash.html
Theres a contract defined in the javadoc (as explained in the link posted by a_b)
If you change the equals() method, you need to ensure that the hashCode() method still meets that contract.
If you change the equals() method, you need to ensure that the hashCode() method still meets that contract.
ASKER
Hi All,
Please refer the below code..here i am comparing two stud objects, but it is executes only equals() but not hashCode(), so how can i write in my second app, to execute the hashCode() also
Please refer the below code..here i am comparing two stud objects, but it is executes only equals() but not hashCode(), so how can i write in my second app, to execute the hashCode() also
package app;
public class Student {
int studId;
String studName;
int studMarks;
public Student(int studId, String studName, int studMarks) {
this.studId = studId;
this.studName = studName;
this.studMarks = studMarks;
}
public boolean equals(Object o) {
boolean result = false;
Student s = (Student) o;
if (this == o) {
return true;
} else {
result = this.studId == s.studId;
return result;
}
}
public int hashCode() {
System.out.println("Hash Code is:" + this.hashCode());
return this.hashCode();
}
}
ASKER
package app;
public class Two
{
public static void main(String[] args) {
Student stud1=new Student(100,"Haneef",70);
Student stud2=new Student(100,"Haneef",80);
if(stud1.equals(stud2))
System.out.println("Both are Same");
else
System.out.println("Not Same");
}
}
ASKER
Based on the above two application, by using the equals() method it self, we could compare the two objects, then why we need to call the hashCode() again.
hashCode() is not used for comparing objects, thats what equals() is for. In fact two objects that are equals can have the same hash code.
hashCode() is used for storing Objects in collections like Map's.
hashCode() is used for storing Objects in collections like Map's.
ASKER
Hi Objects,
Thanks..
u r telling it is not for comparing two objects, then why we need to override hashCode() while comparing the two objects.(i think it is mandatory to override)
Thanks..
u r telling it is not for comparing two objects, then why we need to override hashCode() while comparing the two objects.(i think it is mandatory to override)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Your class should be something like the following, based on your intentions:
public class Student {
int studId;
String studName;
int studMarks;
public Student(int studId, String studName, int studMarks) {
this.studId = studId;
this.studName = studName;
this.studMarks = studMarks;
}
public boolean equals(Object o) {
boolean result = false;
Student s = (Student) o;
if (this == o) {
result = true;
} else {
result = (this.studId == s.studId);
}
return result;
}
public int hashCode() {
return studId;
}
}
ASKER
It is so help full.