Posted on 2012-09-05 14:16 
云云 阅读(1042) 
评论(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}