Posted on 2012-09-05 14:16
云云 閱讀(1036)
評(píng)論(2) 編輯 收藏
linkedHashMap也是map的實(shí)現(xiàn),使用Iterator遍歷的時(shí)候 最先得到的是先插入的數(shù)據(jù)。
保證了數(shù)據(jù)插入的順序。
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方法,當(dāng)超過(guò)這個(gè)容量的時(shí)候,
put進(jìn)新的值方法返回true時(shí),便移除該map中最老的鍵和值
public LinkedHashMap (int initialCapacity, float loadFactor, boolean accessOrder);
initialCapacity 初始容量
loadFactor 加載因子,一般是 0.75f
accessOrder false 基于插入順序 true 基于訪問(wèn)順序(get一個(gè)元素后,這個(gè)元素被加到最后,使用了LRU 最近最少被使用的調(diào)度算法)
如 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}