黑马程序员技术交流社区
标题:
关于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