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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李柯 中级黑马   /  2012-4-21 17:41  /  2060 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

“每个对象可以计算出一个哈希码,然后可以将哈希码分组,每组分别对应某个存储区域。”

我想知道根据哈希码分组的个数是不是已经确定了,还是根据实际情况分。

3 个回复

倒序浏览
当你创建对象的时候,jvm就会根据hashcode()方法产生对应的哈希码,原本哈希值就已分好段,比如1~10,,11~20,如果你的哈希值是5,就把你这个对象放入1~10这个区域,这样方便jvm很快找到,提高了效率
回复 使用道具 举报
1,hashCode方法,将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的哈希码就可以确定该对象应该存储在哪个区域,用哈希算法可以提高从集合查找元素的效率。




2,HashSet就是采用哈希算法存储对象的集合,它内部采用某个数字n进行取余的方式对哈希码进行分组和划分对象存储区域,Object类中定义了一个hashCode()方法来返回每个Java对象的哈希码,当从HashSet集合中查找某个对象时,Java系统首先调用对象的hashCode()方法获得该对象的哈希码,然后根据哈希码找到相应的存储区域,最后取出该区域内的每个元素与该对象进行equals方法比较,这样不用遍历集合中的所有元素就可以得到结论。
回复 使用道具 举报
HashSet 底层是使用HashMap 实现的。当使用add 方法将对象添加到Set  当中时,实际上是将该对象作为底层所维护的Map 对象的key,而value 则都是同一个Object对象(该对象我们用不上);
HashMap 底层维护一个数组,我们向HashMap 中所放置的对象实际上是存储在该数组当中;
当向HashMap  中put 一对键值时,它会根据key  的hashCode 值计算出一个位置,该位置就是此对象准备往数组中存放的位置。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马