Posted on 2012-09-05 14:16
云云 閱讀(1032)
評論(2) 編輯 收藏
linkedHashMap也是map的實現,使用Iterator遍歷的時候 最先得到的是先插入的數據。
保證了數據插入的順序。
public class LRUMap<K, V> extends LinkedHashMap<K, V> {
private static final long serialVersionUID = -3700466745992492679L;
private int coreSize;
public LRUMap(int coreSize) {
super(coreSize + 1, 1.1f, true);
this.coreSize = coreSize;
}
@Override
protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
return size() > coreSize;
}
}
覆蓋removeEldestEntry方法,當超過這個容量的時候,
put進新的值方法返回true時,便移除該map中最老的鍵和值
public LinkedHashMap (int initialCapacity, float loadFactor, boolean accessOrder);
initialCapacity 初始容量
loadFactor 加載因子,一般是 0.75f
accessOrder false 基于插入順序 true 基于訪問順序(get一個元素后,這個元素被加到最后,使用了LRU 最近最少被使用的調度算法)
如 boolean accessOrder = true;
Map<String, String> m = new LinkedHashMap<String, String>(20, .80f, accessOrder );
m.put("1", "my"));
m.put("2", "map"));
m.put("3", "test"));
m.get("1");
m.get("2");
Log.d("tag", m);
若 accessOrder == true; 輸出 {3=test, 1=my, 2=map}
accessOrder == false; 輸出 {1=my, 2=map,3=test}