public class TestSetAdd {
public static void main(String[] args) {
Set<Student> set = new HashSet<Student>();
Student s = new Student();
s.setName("kate");
Student s2 = new Student();
s2.setName("kate");
boolean f1 = set.add(s);
boolean f2 = set.add(s2);
System.out.println(f1 + "," + f2);
System.out.println("size: " + set.size());
}
}
class Student {
private String name;
private int id;
private static int count;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public int hashCode() {
System.out.println(1);
count ++;
// TODO Auto-generated method stub
System.out.println("hashCode:" + this.name.hashCode());
return this.name.hashCode() + count;
}
@Override
public boolean equals(Object obj) {
System.out.println("equals-------------");
if (this == obj) {
return true;
}
if(obj instanceof Student) {
Student s = (Student)obj;
if(this.name.equals(s.getName())) {
return true;
} else {
return false;
}
}
return false;
}
}
先通过hashcode进行快速查找元素,进行比对,若hashcode不同,则肯定不是相同元素,可以插入元素
若hashcode相同,则需要调用equals方法,若返回true,则代表存在相同元素,不能插入元素,否则可以插入元素