Fra*_*fka 7 java caching iterator hashmap linkedhashmap
你怎么能收缩LinkedHashMap
?我重写了removeEldestEntry
方法,但只在插入新值时才调用此方法一次.所以没有改变使地图变小的方式.
该LinkedHashMap
只给我一个正常的Iterator
,并没有任何removeLast
或listIterator
方法,那么如何找到最后,说1000,条目并删除它们?
我能想到的唯一方法是迭代整个事情.但这可能需要很长时间......
每次我只想删除少量元素时创建一个新地图也会破坏内存.
Iterator
当方法maxSize
中的减少时,可能会删除它的第一个值然后重新插入它们removeEldestEntry
.然后重新插入将踢出最旧的值.这是非常难看的代码......有什么更好的想法吗?
编辑:Sry迭代顺序是最年轻的.这很容易
对于LinekdHashMap,迭代器将从最旧到迭代迭代.如果要将LinkedHashMap缩小到可以使用以下内容的大小,则可以使用.
Map<K,V> lhm =
int desiredSize =
for(Iterator iter = lhm.keySet().iterator();iter.hasNext()) {
if(lhm.size() <= desiredSize) break;
iter.remove();
}
Run Code Online (Sandbox Code Playgroud)
每个条目删除大约需要20 ns.