A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 爱你一万年 中级黑马   /  2016-9-11 23:05  /  347 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Object类的hashCode()方法  和集合的hashCode()方法不一样吗?判断元素唯一是重写hashCode()方法-------》指的是地址值?和equals()方法--------->指的是?依据的是什么?

3 个回复

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

谢谢,你说的很明白
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马