黑马程序员技术交流社区

标题: 关于hashset [打印本页]

作者: 徐芾清    时间: 2014-3-8 19:25
标题: 关于hashset
如果存进hashset的元素没有override  hashcode方法那会怎样?object默认的hashcode是什么?
作者: 李金中    时间: 2014-3-8 19:33
就是 根据数据存储地址计算出来的一个值
作者: 也许依然    时间: 2014-3-8 20:04
本帖最后由 也许依然 于 2014-3-8 20:40 编辑

HashSet底层的数据结构是哈希表,在查找时,理想的情况是不经过任何比较,一次存取便能得到所查的记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使没个关键字和结构中一个唯一的存储位置相对应,这个对应关系f就是哈希函数。
在建立对象时会根据特定的哈希函数和数据的存储地址算出一个值,即hashcode
如果没有重写hashCode方法,在HashSet中存储自定义元素时,建立多个对象,可能将相同的元素存储进去,因为不同对象对应的哈希值是不同的
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。这一般是通过将该对象的内部地址转换成一个整数来实现的
作者: 桃华月禅    时间: 2014-3-8 21:49
我还在想override什么意思呢,我怎么不记得有这么个方法,原来是复写的意思.......
复写hashCode在我看来就像每个人的身份证一样,基本上我是不知道什么的hashCode默认就是相同的!(我是个小白,只是自己的理解,不过感觉是对的)
HashSet首先通过判断传进来对象的hashCode()是否相同,按上边所说,传入的对象的hashCode()方法值都不同,那就是都能存进来,如果这是你想要的结果,那就别复写= =|||可是你想让重复姓名的不能存进来,那就可以复写hashCode就可以达到这个结果。




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