gpt4 book ai didi

java - 在 Java 中收缩 LinkedHashMap

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:45 25 4
gpt4 key购买 nike

如何缩小 LinkedHashMap?我覆盖了 removeEldestEntry 方法,但此方法仅在插入新值时调用一次。因此,以这种方式缩小 map 没有任何变化。

LinkedHashMap 只给我一个普通的 Iterator 并且没有任何 removeLastlistIterator 方法,那么您如何才能找到最后的(比如 1000 个)条目并将其删除?

我能想到的唯一方法就是迭代整个过程。但这可能需要很长时间...

每次我想只删除几个元素时创建一个新 map 也会破坏内存。

removeEldestEntry 方法中的 maxSize 减少时,可能会删除 Iterator 的第一个值,然后重新插入它们。然后重新插入将踢出最旧的值。这是非常丑陋的代码...还有更好的想法吗?

编辑:对不起,迭代顺序是从旧到新。所以很简单

最佳答案

对于 LinekdHashMap,迭代器将从最老的到最年轻的进行迭代。如果您想将 LinkedHashMap 缩小到可以使用以下大小的大小。

Map<K,V> lhm =
int desiredSize =
for(Iterator iter = lhm.keySet().iterator();iter.hasNext()) {
if(lhm.size() <= desiredSize) break;
iter.next(); //required else IllegalStateException since current=null
iter.remove();
}

删除每个条目大约需要 20 纳秒。

关于java - 在 Java 中收缩 LinkedHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7250157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com