HashCode and equals problem
PremSep 5 2011 — edited Sep 6 2011 Hi I am implementing hashcode and equals method to avoid duplicates in Set collection. I successfully did it but confused ..
following is code snippet :
package TestCollection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.SortedSet;
import java.util.TreeSet;
class Student
{
private int id;
private String fname;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
@Override
public int hashCode() {
System.out.println("hashcode -->"+this.id+"--"+this.fname);
return this.id;
}
@Override
public boolean equals(Object o) {
System.out.println("equals -->"+((Student)o).getFname());
boolean bool = false;
if(this.id == ((Student)o).getId())
bool = true;
System.out.println("#############################"+this.getFname());
return bool;
}
@Override
public String toString() {
// TODO Auto-generated method stub
String s=""+this.id+" "+this.fname;
return s;
}
}
public class TestSetToAvoidDuplicateOfUserDefinedClass
{
public static void main(String[] args) {
HashSet tSet=new HashSet();
Student s1=new Student();
s1.setId(1);
s1.setFname("abc");
Student s2=new Student();
s2.setId(1);
s2.setFname("xyz");
Student s3=new Student();
s3.setId(2);
s3.setFname("abc");
Student s4=new Student();
s4.setId(3);
s4.setFname("lmn");
tSet.add(s1);
tSet.add(s2);
tSet.add(s3);
tSet.add(s4);
for(Object o:tSet)
{
System.out.println("-->"+o);
}
}
}
while adding equals method is being called only once when is s2 is about to add. For others it is not being called .. Could you please elaborate this kind of behavior...