黑马程序员技术交流社区

标题: 关于hashCode方法的疑问? [打印本页]

作者: 李柯    时间: 2012-4-21 17:41
标题: 关于hashCode方法的疑问?
“每个对象可以计算出一个哈希码,然后可以将哈希码分组,每组分别对应某个存储区域。”

我想知道根据哈希码分组的个数是不是已经确定了,还是根据实际情况分。
作者: 徐鑫    时间: 2012-4-21 17:55
当你创建对象的时候,jvm就会根据hashcode()方法产生对应的哈希码,原本哈希值就已分好段,比如1~10,,11~20,如果你的哈希值是5,就把你这个对象放入1~10这个区域,这样方便jvm很快找到,提高了效率
作者: 乞文超    时间: 2012-4-21 17:55
1,hashCode方法,将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的哈希码就可以确定该对象应该存储在哪个区域,用哈希算法可以提高从集合查找元素的效率。




2,HashSet就是采用哈希算法存储对象的集合,它内部采用某个数字n进行取余的方式对哈希码进行分组和划分对象存储区域,Object类中定义了一个hashCode()方法来返回每个Java对象的哈希码,当从HashSet集合中查找某个对象时,Java系统首先调用对象的hashCode()方法获得该对象的哈希码,然后根据哈希码找到相应的存储区域,最后取出该区域内的每个元素与该对象进行equals方法比较,这样不用遍历集合中的所有元素就可以得到结论。

作者: 光sail    时间: 2012-4-21 18:04
HashSet 底层是使用HashMap 实现的。当使用add 方法将对象添加到Set  当中时,实际上是将该对象作为底层所维护的Map 对象的key,而value 则都是同一个Object对象(该对象我们用不上);
HashMap 底层维护一个数组,我们向HashMap 中所放置的对象实际上是存储在该数组当中;
当向HashMap  中put 一对键值时,它会根据key  的hashCode 值计算出一个位置,该位置就是此对象准备往数组中存放的位置。




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