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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-7-25 15:27  /  5470 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我知道用hashset存入元素的时候是根据哈希值来存的,然后把哈希值存入哈希表。那么,取值的时候是按照哈希值的大小来取的么?还是按照哈希表的顺序来取的啊

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
取值的时候是按照哈希值的大小来取,因为存入数据时是按哈希表上的哈希值顺序存的,存入数据时已经排好序了
回复 使用道具 举报
取值的时候还是根据你存进去的时候根据对象的属性算出来的哈希值的方法一样再计算一次哈希值。
就可以迅速的得出他存储的所在位置。HashSet继承自Set集合。所有他的元素也是元素无序的,不可重复的。
HashSet 的实现其实非常简单,它只是封装了一个 HashMap 对象来存储所有的集合元素,
所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。
他自己就是hashMap中的key,所以不是按哈希表来的顺来取。应该是用哈希值的大小来取的。

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
取的时候也是根据哈希表的,只不过怎样取,是根据你自己定义的,
你让他按照某个条件取出,那么它就按照你的条件一个一个的把值取出来,
只不过它在取的过程中自己根据哈希表有计算了一次罢了,
HashSet实现了Set接口的hash table(哈希表),依靠HashMap来实现,
应该为要存放到散列表的各个对象定义hashCode()和equals(),
因为实现了set接口所以不能有重复的元素。
我用hashset就喜欢它的不可重复元素性质。

希望对你有用!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马