首页 > 代码库 > java对象判断相等

java对象判断相等

在java的集合中,判断两个对象是否相等的规则是:
1),判断两个对象的hashCode是否相等
      如果不相等,认为两个对象也不相等,完毕

      如果相等,转入2)

2),判断两个对象用equals运算是否相等,相等就返回true


class Weibo   
{     
    private String name;
    publicWeibo   (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。需要重写这两个方法。

java对象判断相等