------- android培训、java培训、期待与您交流! ----------
今天在看视频时,毕老师在讲解HashSet结构时,用的例子中讲到HashSet保证元素唯一性的手段
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
在视频中 由于直接粘贴了前面的自定义equals方法:
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
System.out.println(this.name+"...equals.."+p.name);
return this.name.equals(p.name) && this.age == p.age;
}
所以在后面重写hashCode()后,比较的对象hash值相等,就调用上面equals()方法。
于是我就想,如果没有这个重写的equals方法的话,那么调用的会是哪个方法呢,然后去查api文档
发现HashSet中没有equals()方法,但他继承了java.util.AbstractSet中的equals()方法,
此实现首先检查指定的对象是否是此 set;如果是,则返回 true。然后,它将检查指定的对象是否是一个大小与此 set 的大小相等的 set;如果不是,则返回 false。如果是,则返回containsAll((Collection) o)。
|
---|
所以,即使没有那个重写的方法,HashSet中也有自己的equals()方法去判断hash值相同的对象。
但是明显这个方法并不能应对各种需求。因此,hashCode()和equals()方法在用到时一般都需要复写掉。
------- android培训、java培训、期待与您交流! ----------
详细请查看:http://edu.csdn.net/heima/