【发布时间】:2018-04-20 23:24:50
【问题描述】:
我有一个疑问::
目前java中的HashMap,当totalSize(no of elements inserted) > arrayLength * loadFactor时调整大小
所以它使表格翻倍并重新散列所有键值。
但是假设 Key 类中的 hashcode 被硬编码为 1,所以每次元素都会以链表的方式插入到索引 1 处。但是我们的bucketarray 将不必要地调整总大小。所以它会继续增加bucketarray 的大小,而元素在同一个桶中使用这种哈希码实现。
我有一个问题,我们是否应该检查已填充存储桶的调整大小,而不是总大小??
我知道这样的哈希码会影响性能。我问这是一个合乎逻辑的问题。
【问题讨论】:
-
仅供参考,它是not always a linked list。
-
使用总元素简化了实现,而不是跟踪使用的存储桶。很可能 HashMap 开发人员没有将他们的设计基于使用他们不需要的 HashMap 的人,或者做了一些非常愚蠢的事情,比如为每个元素使用相同的键,或者提供了一个糟糕的 hashCode() 函数
-
@nos “或以其他方式提供了错误的 hashCode() 函数”实际上, 采取了一些措施来减少不良哈希函数对性能的影响。