在搜索Java的LRU Cache实现时,遇到了两个具有类似实现的单独帖子,并且两者都在初始化LinkedHashMap,初始容量= MAX_ENTRIES + 1 [例如new LinkedHashMap(MAX_ENTRIES+1, .75F, true)
]
初始容量设置为MAX_ENTRIES + 1的原因是什么?
参考帖子:
答案 0 :(得分:2)
坦白说,因为他们不知道自己在做什么。
LinkedHashMap
的文档指定容量和加载因子的详细信息与HashMap
完全相同,HashMap
指定
HashMap的一个实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。加载因子是在自动增加容量之前允许哈希表获取的完整程度的度量。 当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表的数量大约是哈希表的两倍。桶中。强>
"容量"地图的数量是哈希表桶的数量,不是地图中允许的条目数。
因此,当您添加LinkedHashMap
条目时,您描述的(MAX_ENTRIES + 1) * 0.75
的哈希表将会调整大小,基本上是MAX_ENTRIES
的四分之三。
我怀疑他们尝试以确保地图只有一个额外条目的空间,因此地图在插入新条目和驱逐最旧条目之间没有调整大小进入,但实际上并不是这样的。