HashSet中判断两个对象相等是通过hashCode()和equals()两个方法,如果这两个对象的hashCode()返回值不同而equals()返回值一样,会导致HashSet集合把这两个对象存在不同的位置上,而如果hashCode()返回值一样而equals()不同,情况更加复杂些。简单的说,hashSet中访问元素,先计算hashCode的值,再到该值的位置上取元素。
而List中判断两个对象相等的标准是equals()方法,举个例子:
class A{
public void equals(Object obj){
return true;
}
}
public class test{
public static void main(String[] args){
List list = new ArrayList();
list.add(new String("nihao"));
list.add(new String("hello"));
list.remove(new A());
}
}
一样可以删除掉元素,虽然他们不是同一个类,不是同一个对象.
|