你说的应该是set集合吧?保证判断元素唯一,用的是内部元素的hashCode和equals方法,不是集合的hashCode。
我们重写hashCode是为了减少调用equals方法,如果不重写,会用到Object的hashCode方法,而Object中hashCode返回的是地址值,这样没有意义,因为不同对象地址值肯定是不同的。
判断元素是否相同,先用到元素的hashCode,如果hashCode一样,再去调用equals方法,我们要根据需要来定义怎样才是元素相同,然后再去重写equals方法。
比如人,如果我们需要认为姓名和年龄相同则是同一个人,那么我们就要去重写equals方法,判断姓名和年龄是否相同,当然这个就非常麻烦,因为equals方法还是比较耗时的。
不过,在调用equals方法之前会先判断hashCode,所以我们可以根据属性来算出一个hashCode,如果hashCode不一样,那么内部属性也就不一样了,就不会调用equals方法。
个人建议,你如果基础较好的话,可以多看看底层源码;基础不好,也可以尝试去理解下,但不必深究。 |