有没有人知道为什么哈希表的java jdk实现在删除时不会重新表格?
如果空间使用率太低怎么办?这不是缩小尺寸和改造的理由吗?
就像加载因子0.75一样触发put上的rehash,我们可以在表的密度上有一个像0.25这样的下限(当然可以在这里用最好的值进行分析)并再次触发rehash,只要它的大小该表的大于initialCapacity。
答案 0 :(得分:7)
Rehashing是一项昂贵的操作,基于java哈希的数据结构试图避免它。它们只在查找性能差时才进行重新散列。这是此类数据结构的目的:查找性能。
以下是来自HashMap java docs的引用:
在设置初始容量时,应考虑地图中预期的条目数及其加载因子,以便最大限度地减少重新扫描操作的次数。如果初始容量大于最大条目数除以负载因子,将不会发生任何重新连接操作。
如果要在HashMap实例中存储多个映射,那么以足够大的容量创建映射将允许映射更有效地存储,而不是根据需要执行自动重新散列来扩展表
除了这个论点之外,java创建者可能认为如果你的哈希表中有那么多元素,那么再次使用它们的可能性非常大,所以不需要重新表达两次表。
答案 1 :(得分:2)
您应该询问Sun / Oracle工程师,以了解为什么没有减小尺寸的阈值。
这是我的两分钱:
另一方面:
在生活中的编程中,有很多事情可以做。有些只是非常具体的案例。有些人根本不值得痛苦。