黑马程序员技术交流社区

标题: 判断元素唯一的原理? [打印本页]

作者: 爱你一万年    时间: 2016-9-11 23:05
标题: 判断元素唯一的原理?
Object类的hashCode()方法  和集合的hashCode()方法不一样吗?判断元素唯一是重写hashCode()方法-------》指的是地址值?和equals()方法--------->指的是?依据的是什么?
作者: jiubaK    时间: 2016-9-11 23:09
Object类的hashCode()方法  和集合的hashCode()方法,这个属于重写嘛。集合重写了hashCode方法。
作者: jiubaK    时间: 2016-9-11 23:24
你说的应该是set集合吧?保证判断元素唯一,用的是内部元素的hashCode和equals方法,不是集合的hashCode。
我们重写hashCode是为了减少调用equals方法,如果不重写,会用到Object的hashCode方法,而Object中hashCode返回的是地址值,这样没有意义,因为不同对象地址值肯定是不同的。
判断元素是否相同,先用到元素的hashCode,如果hashCode一样,再去调用equals方法,我们要根据需要来定义怎样才是元素相同,然后再去重写equals方法。
比如人,如果我们需要认为姓名和年龄相同则是同一个人,那么我们就要去重写equals方法,判断姓名和年龄是否相同,当然这个就非常麻烦,因为equals方法还是比较耗时的。
不过,在调用equals方法之前会先判断hashCode,所以我们可以根据属性来算出一个hashCode,如果hashCode不一样,那么内部属性也就不一样了,就不会调用equals方法。
个人建议,你如果基础较好的话,可以多看看底层源码;基础不好,也可以尝试去理解下,但不必深究。
作者: 爱你一万年    时间: 2016-9-13 20:43
jiubaK 发表于 2016-9-11 23:24
你说的应该是set集合吧?保证判断元素唯一,用的是内部元素的hashCode和equals方法,不是集合的hashCode。
...

谢谢,你说的很明白




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2