我编写了以下代码来测试所有元素在同一存储桶中结束时的哈希映射行为:-
main
}
我得到以下输出: 32
即使所有元素都在同一个存储桶中结束,为什么还要进行大小调整?
答案 0 :(得分:2)
因为HashMap就是这样工作的:
当哈希表中的条目数超过负载因子和当前容量的乘积时,哈希表将被重新映射。
HashMap仅知道,一旦达到限制,冲突的可能性就会变得过高,并且必须重新哈希以降低该可能性并为将来的输入留出空间。它假定hashCode的实现很好,并且完全没有办法知道冲突是否是由于hashCode的不好实现所带来的不幸。
答案 1 :(得分:0)
您可以调试您的代码,然后您将发现永远不会调用类'DerivedMain'中定义的'hashcode'方法,因此所有元素均不在同一存储桶中。但是输出为32的真正原因是hashmap的size(20)大于阈值(table.size * loadfactor)。如果您想了解hashmap的更多工作细节,则应阅读jdk中的源代码