posts - 110, comments - 101, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
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}







评论

# re: 借助linkedHashMap 实现 LRUMap,按查询频率  回复  更多评论   

2012-09-20 16:36 by Lingo
hello,在吗?我是猎头Lingo,有一个web开发的职位想作推荐,但您的电话号码错误。方便的话打个电话给我吧:13989485332

# re: 借助linkedHashMap 实现 LRUMap,按查询频率  回复  更多评论   

2012-09-26 16:58 by 云云
新浪微博是hello_yun @Lingo

只有注册用户登录后才能发表评论。


网站导航: