2011-08-30 112 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納秒每個條目刪除。