如果相等,转入2)
2),判断两个对象用equals运算是否相等,相等就返回true
class Weibo
{
private String name;
public
Weibo (String name)
{
this.name = name;
}
// 根据name判断两个 weibo 是否相等
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
if (o.getClass() == Name.class)
{
Weibo weibo = (Weibo)o;
return weibo.name.equals(name);
}
return false;
}
// 根据 first 计算 Name 对象的 hashCode() 返回值
public int hashCode()
{
return name.hashCode();
}
public class HashSetTest
{
public static void main(String[] args)
{
HashSet<Weibo> set = new HashSet<Weibo>();
set.add(new Weibo("abc" );
set.add(new Weibo("abc" );
System.out.println(set);
}
}
执行结果:无法插入第二个对象。原因是什么,因为要判断hashcode,然后equals.
Weibo.hashcode中返回的是name,也就是说当name相同时,两个weibo的hashcode就相同,这样的话就开始判断equals 一判断是相同的。hashset
是不允许插入重复的。所以。
这就是hashset判断对象是否相同的原理。
结论Hashtable、HashMap、HashSet、LinkedHashMap中的key,需要判断该key对象的hashcode与equals。需要重写这两个方法。
原文地址:http://blog.csdn.net/yclfdn2004/article/details/43266551