我们知道HashMap会将所有数据保存在存储桶中(根据hashCode()计算存储桶位置)。
有没有办法获得桶的所有元素(没有迭代整个桶)
像
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 :(得分:5)
您无法获取Java HashMap的桶的所有元素。这是因为存储桶是HashMap实现的内部概念,因此不会被HashMap公开。 (HashMap没有公共方法可以处理存储桶的概念。)
为了完成你想要做的事情,你需要自己实现桶。这意味着您将需要Map<Integer,List<MyElement>>
。整数是一个哈希码,List<MyElement>
将成为你的桶。
编辑:
所以,现在,在评论中你要问的是最佳表现。所以,这可能是你想要完成的家庭作业,而没有先完全理解哈希映射背后的理论。很有可能你完全误解了整个情况:分配要求你做什么,如何解决它,甚至是什么样的哈希图。
如果您对性能有一点关注,那么您应该放弃担心自己实现桶并继续使用语言提供给您的简单,简单明了。只需确保您的对象实现了良好的哈希函数,这意味着哈希函数可以产生广泛的分布。散列函数间接影响将由散列映射在内部创建的桶的数量,并且您希望它创建尽可能多的桶,每个桶中的元素尽可能少。广泛的分布将做到这一点。
你自己不操纵桶,也没有任何方法可以观察它们(除了使用调试器),但是hashmap内部创建的桶数取决于你的散列函数有多好。 / p>
答案 1 :(得分:0)
除了Mike Nakis的回答之外,如果您的目的只是通过Map
从index
获取对象,请使用接口methode Object get(key)
。