2011-08-30 41 views
7

如何缩小LinkedHashMap?我忽略了removeEldestEntry方法,但只有在插入新值时才会调用此方法。所以这种方式使地图变小没有变化。收缩Java中的LinkedHashMap

LinkedHashMap只给我一个正常的Iterator,并没有任何removeLastlistIterator方法,那么如何找到最后,说1000,条目并删除它们?

我能想到的唯一方法就是遍历整个事物。但是,可以采取年龄...

创建一个新的地图我想删除只有几个元素也将破坏内存每次。

也许除去Iterator的第一值,然后重新插入它们,当maxSizeremoveEldestEntry方法降低。然后重新插入将踢出最古老的值。这是非常丑陋的代码...任何更好的想法?

编辑:Sry基因迭代顺序是最早到最小。所以很容易

回答

5

的迭代器会遍历从旧到新的LinekdHashMap。如果你想将LinkedHashMap缩小到一个大小,你可以使用下面的代码。

Map<K,V> lhm = 
int desiredSize = 
for(Iterator iter = lhm.keySet().iterator();iter.hasNext()) { 
    if(lhm.size() <= desiredSize) break; 
    iter.remove(); 
} 

这应该需要约20纳秒每个条目删除。