如何在HashMap中获取桶中的所有元素

问题描述:

正如我们所知,HashMap将所有数据保存在桶中(根据hashCode()计算桶位置)。如何在HashMap中获取桶中的所有元素

有没有什么办法让斗的所有元素(不反复整桶

my hashCode() method generates hashcode like (**bkt1,bkt2,bkt3 and bkt4**) 
in **bkt1** we have values like (**val1,val2,val3 and val4**) 
in **bkt2** we have values like (**val5,val6 and val7**) 
and so on .... 

我能斗的所有值BKT1 不反复整个地图

+0

你为什么要这样做?仅仅是为了调试的目的,还是你有功能的原因来访问个别桶? – Dolda2000 2015-02-05 14:57:06

+0

我必须保存在HashMap中一些雇用了,我想分类像 2000 $的工资 的基础 - $ 3000 3001 $ - $ 3500 3501 $ - $ 4000 现在,如果我想使用那些具有之间工资2000 $ - 3000 $我只是选择第一个桶元素 我不想迭代整个hashMap – user3619843 2015-02-09 06:47:43

+0

我必须承认,我不明白为什么你会想要访问哈希桶。员工是否因工资或其他事情而遭受冷遇?这听起来像一个'TreeMap'就是你想要的东西,如果有的话。 – Dolda2000 2015-02-09 06:49:37

您无法获取Java HashMap的桶中的所有元素。这是因为存储桶是实现HashMap的内部概念,因此不会被HashMap公开。 (没有公开的处理桶概念的HashMap方法)

为了完成你正在尝试做的事情,你需要自己实现桶。这意味着你将需要一个Map<Integer,List<MyElement>>。整数是散列码,并且List<MyElement>将成为您的存储桶。

编辑:

所以,现在,在评论你问的最佳性能。所以,这可能是一项家庭作业,如果没有首先完全理解hashmaps背后的理论,那么你试图完成这项作业。而且有可能你已经完全误解了这里的所有情况:作业要求你做什么,如何解决它,甚至是什么hashmaps。

如果您对性能有丝毫关切,那么您应该放弃担心自己实施存储桶并继续使用由语言提供给您的散列表,这很简单明了。只要确保你的对象实现了一个好的散列函数,这意味着一个散列函数可以产生广泛的分布。散列函数间接影响将由散列映射内部创建的存储区数量,并且您希望它尽可能多地创建存储区,尽可能减少每个存储区中的元素。广泛的分布将做到这一点。

你不会自己操纵桶,也没有任何观察它们的方法(除了使用调试器),但hashmap内部将创建多少桶取决于你的哈希函数有多好。

+0

什么应该是HashMap中的桶号和桶大小。所以,我可以根据这个设计我的hashCode(),就像我必须在地图上保存500条记录,所以应该是不。的桶表现得很好 – user3619843 2015-02-06 07:12:24

+0

我不确定你在问什么,或者如果你问什么,(我没有看到任何问号),但是如果你问什么应该是桶的数量,那么,hashmaps有概念的负载率,而合理的数字为75%。这意味着桶的数量应该是地图中元素数量的75%左右。 – 2015-02-06 08:32:19

+0

关于表现,我修改了我的答案。 – 2015-02-06 08:40:54

除了Mike Nakis的回答,如果您的意图只是通过indexMap获取对象,请使用接口方法Object get(key)