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

Java 如何在HashMap中获取bucket的所有元素,java,Java,正如我们所知,HashMap将所有数据保存在bucket中(根据hashCode()计算bucket位置) 是否有任何方法可以获取bucket的所有元素(而不迭代整个bucket) 像 我可以在不迭代整个映射的情况下获取bucket bkt1的所有值吗?您无法获取java HashMap的bucket的所有元素。这是因为bucket的概念是HashMap实现的内部概念,所以HashMap不会公开它。HashMap没有处理bucket概念的公共方法 (谢天谢地!我甚至不想去想,如果Bucket的概

正如我们所知,HashMap将所有数据保存在bucket中(根据hashCode()计算bucket位置)

是否有任何方法可以获取bucket的所有元素(而不迭代整个bucket


我可以在不迭代整个映射的情况下获取bucket bkt1的所有值吗?

您无法获取java HashMap的bucket的所有元素。这是因为bucket的概念是HashMap实现的内部概念,所以HashMap不会公开它。HashMap没有处理bucket概念的公共方法

(谢天谢地!我甚至不想去想,如果Bucket的概念被公开,HashMap的接口会变得多么复杂。)

由于bucket是不公开的,所以除了使用调试器之外,您不能自己操作它们,也没有任何方法来观察它们

为了控制存储桶,您需要自己实现哈希映射。这并不十分困难,但也不是在公园里散步。提出一个比内置java HashMap性能更好的HashMap实现的可能性微乎其微

因此,如果您对性能有一点担心,那么您应该停止担心bucket,继续使用该语言提供给您的HashMap,就像现在一样

当您使用内置java HashMap时,对存储桶的唯一控制是间接的:

将创建多少个存储桶取决于哈希函数的性能。所以,只要确保您的对象实现了一个好的哈希函数,也就是说,一个可以产生广泛分布的哈希函数


为了获得最佳性能,目标是让HashMap创建尽可能多的bucket,每个bucket中的元素尽可能少,而广泛的散列分布将实现这一点。

除了Mike Nakis的答案之外,如果您的目的只是通过
索引从
映射
获取对象,使用接口方法e
对象获取(键)

为什么要这样做?这仅仅是为了调试目的,还是访问单个bucket有功能上的原因?我必须在hashMap中保存一些文件,我想根据工资进行分类,比如2000$-3000$3001$-3500$3501$-4000$,如果我想雇佣那些工资在2000$-3000$之间的人,我只选择第一个bucket元素,我不想迭代整个hashMapI,我必须承认我不明白你为什么要访问hash bucket。员工们是不是被工资之类的东西弄得乱七八糟?这听起来像一个
TreeMap
是你想要的,如果有的话。我必须在hashMap中保存一些雇佣关系,我想根据工资分类,比如2000$-3000$3001$-3500$3501$-4000$,如果我想雇佣那些工资在2000$-3000$之间的人,我只选择第一个bucket元素,我不想迭代整个hashMap对不起,但哈希表不是这样工作的。您可能应该重新阅读一下它们。HashMap中的bucket no和bucket size应该是什么。因此,我可以根据这一点设计hashCode(),就像我必须在map中保存500条记录,那么要执行好的bucket数应该是多少我不确定你在问什么,或者你在问什么,(我没有看到任何问号),但是如果你问bucket数应该是多少,那么HashMap有负载因子的概念,一个合理的数字是75%。这意味着存储桶的数量应该是地图中元素数量的75%左右。另外,在stackoverflow上,当有人对你的问题添加评论,要求你澄清一些事情时,就像上面@Dolda2000所做的那样,你最好不要让他们的问题没有答案。
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 ....