hashset先调用对象的hashcode函数来进行散列,当散列到不同位置时,则认为对象不相同且进行插入操作(不用判断equals函数);
当散列到同一个位置才会调用对象的equals函数来进行比较,只当equals返回false则认为两个对象不相等才会进行插入操作,否则认为两个对象相同而不进行插入操作。
public static void main(String[] args)
{
class test
{
private int o1;
private int o2;
@Override
public int hashCode()
{
return 1;
}
@Override
public boolean equals(Object obj)
{
if (obj == this) {
return true;
}
if (!(obj instanceof test)) {
return false;
}
test t = (test) obj;
if (this.o1 == t.o1 && this.o2 == t.o2) {
return true;
}
else {
return false;
}
}
}
test t1 = new test();
test t2 = new test();
t1.o1=1;
t1.o2=2;
t2.o1=1;
t2.o2=2;
List list = new ArrayList();
list.add(t1);
list.add(t2);
Set set = new LinkedHashSet();
set.add(t1);
set.add(t2);
System.out.println(set);
}
结果只添加了第一个。