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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐芾清 中级黑马   /  2014-3-8 19:25  /  791 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果存进hashset的元素没有override  hashcode方法那会怎样?object默认的hashcode是什么?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

3 个回复

倒序浏览
就是 根据数据存储地址计算出来的一个值
回复 使用道具 举报
本帖最后由 也许依然 于 2014-3-8 20:40 编辑

HashSet底层的数据结构是哈希表,在查找时,理想的情况是不经过任何比较,一次存取便能得到所查的记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使没个关键字和结构中一个唯一的存储位置相对应,这个对应关系f就是哈希函数。
在建立对象时会根据特定的哈希函数和数据的存储地址算出一个值,即hashcode
如果没有重写hashCode方法,在HashSet中存储自定义元素时,建立多个对象,可能将相同的元素存储进去,因为不同对象对应的哈希值是不同的
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。这一般是通过将该对象的内部地址转换成一个整数来实现的

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
我还在想override什么意思呢,我怎么不记得有这么个方法,原来是复写的意思.......
复写hashCode在我看来就像每个人的身份证一样,基本上我是不知道什么的hashCode默认就是相同的!(我是个小白,只是自己的理解,不过感觉是对的)
HashSet首先通过判断传进来对象的hashCode()是否相同,按上边所说,传入的对象的hashCode()方法值都不同,那就是都能存进来,如果这是你想要的结果,那就别复写= =|||可是你想让重复姓名的不能存进来,那就可以复写hashCode就可以达到这个结果。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马