如何缩小 LinkedHashMap
?我覆盖了 removeEldestEntry
方法,但此方法仅在插入新值时调用一次。因此,以这种方式缩小 map 没有任何变化。
LinkedHashMap
只给我一个普通的 Iterator
并且没有任何 removeLast
或 listIterator
方法,那么您如何才能找到最后的(比如 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/