Hashtable rehash on remove

vis*_*shr 1 java resize hashtable

有没有人知道为什么哈希表的java jdk实现在删除时不重新表格?

如果空间使用率太低怎么办?这不是缩小尺寸和改造的理由吗?

就像加载因子0.75一样触发put上的rehash,我们可以在表的密度上有一个像0.25这样的下限(当然可以在这里用最好的值进行分析)并再次触发rehash,前提是表的大小大于initialCapacity.

dce*_*chi 7

Rehashing是一项昂贵的操作,基于java哈希的数据结构试图避免它.它们只在查找性能不佳时进行重新散列.这是此类数据结构的目的:查找性能.

这是来自HashMap java文档的引用:

在设置其初始容量时,应考虑映射中的预期条目数及其加载因子,以便最小化重新散列操作的数量.如果初始容量大于最大条目数除以加载因子,则不会发生重新加载操作.

如果要将多个映射存储在HashMap实例中,则使用足够大的容量创建映射将允许映射更有效地存储,而不是根据需要执行自动重新散列来扩展表.

除了这个论点之外,java创建者可能会认为如果你的哈希表中有那么多元素,那么再次拥有它们的概率非常大,所以不需要重新两次表格.