Android LRU算法中LinkedHashMap补充 <11>
来源:互联网 发布:ubuntu gps.h 编辑:程序博客网 时间:2024/06/09 23:56
上一篇提到LRUCache.java文件中涉及到下面的变量参数,说的不是太清楚,下面是单独的事例补充一下.
private int maxSize;
另外,如果让LinkedHashMap移除超出的部分,比如设置maxSize=10,结果向里面put了12对象,那么其中就要为了保证只有10个对象,就需要移除多余的两个,LinkedHashMap设计的是移除最先put进来的那那个对象,也就是第一和第二个put进来的那两个对象.
/** * Removes the entry for {@code key} if it exists. * * @return the previous value mapped by {@code key}. */ public final V remove(K key) { if (key == null) { throw new NullPointerException("key == null"); } V previous; synchronized (this) { previous = map.remove(key); if (previous != null) { size -= safeSizeOf(key, previous); } } if (previous != null) { entryRemoved(false, key, previous, null); } return previous; }
下面在上一篇的基础上再进一步的程序调整:
DurianUtil.java
package org.durian.durianlrubitmap.util;import android.util.Log;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.Map;/** * Project name : DurianLRUBitmap * Created by zhibao.liu on 2016/1/13. * Time : 18:33 * Email warden_sprite@foxmail.com * Action : durian */public class DurianUtil { private final static String TAG="DurianUtil"; private final static int LINKED_MAX=10; public static void DurianLinkedHashMap(){ Map<Integer,String> map=new LinkedHashMap<Integer, String>(); map.put(5,"hello,zhibao.liu"); map.put(8,"hello,world !"); map.put(3,"hello,java programe !"); for (Iterator it=map.keySet().iterator();it.hasNext();){ Object key=it.next(); Log.i(TAG,"link key : "+key.toString()); } Log.i(TAG,"++++++++++++++++++++++++++++++++++++++++++++"); LinkedHashMap<Integer,String> linkmap=new LinkedHashMap<Integer, String>(LINKED_MAX,0.75f,false){ @Override protected boolean removeEldestEntry(Entry<Integer, String> eldest) { return this.size()>LINKED_MAX;// return super.removeEldestEntry(eldest); } }; for (int i=0;i<12;i++){ linkmap.put(i,"i="+i); } for (Iterator it=linkmap.keySet().iterator();it.hasNext();){ Object key=it.next(); Log.i(TAG,"linkmap key : "+key.toString()); } Log.i(TAG,"#########################################"); DurianLinkedHashMap<Integer,String> durianLinkedHashMap=new DurianLinkedHashMap<Integer, String>(); durianLinkedHashMap.setLINK_HASHMAP_MAX_SIZE(10); for (int i=0;i<12;i++){ durianLinkedHashMap.put(i,"i = "+i); } for(Iterator it=durianLinkedHashMap.keySet().iterator();it.hasNext();){ Object key=it.next(); Log.i(TAG,"durianLinkedHashMap : "+key.toString()); } Log.i(TAG,"durianLinkedHashMap MAX : "+durianLinkedHashMap.getLINK_HASHMAP_MAX_SIZE()); Log.i(TAG,"******************************************"); Map<Integer,String> hashmap=new HashMap<Integer, String>(); hashmap.put(5,"hello,zhibao.liu"); hashmap.put(8,"hello,world !"); hashmap.put(3,"hello,java programe !"); for (Iterator it=hashmap.keySet().iterator();it.hasNext();){ Object key=it.next(); Log.i(TAG,"hash key : "+key.toString()); } }}
主要查看上面代码的一段如下:
protected boolean removeEldestEntry(Entry<Integer, String> eldest) { return this.size()>LINKED_MAX;// return super.removeEldestEntry(eldest); }
这个返回值,如果返回的是false,LinkedHashMap将不会进行移除最先put进来的,当返回是true时,LinkedHashMap就会进行移除超出MAX size的部分,移除最先put进来的对象.
DurianLinkedHashMap.java
package org.durian.durianlrubitmap.util;import java.util.LinkedHashMap;import java.util.Map;/** * Project name : DurianLRUBitmap * Created by zhibao.liu on 2016/1/14. * Time : 13:46 * Email warden_sprite@foxmail.com * Action : durian */public class DurianLinkedHashMap<V,T> extends LinkedHashMap { private int LINK_HASHMAP_MAX_SIZE=0; public void setLINK_HASHMAP_MAX_SIZE(int max){ LINK_HASHMAP_MAX_SIZE=max>=0?max:0; } public int getLINK_HASHMAP_MAX_SIZE(){ return LINK_HASHMAP_MAX_SIZE; }; @Override protected boolean removeEldestEntry(Entry eldest) {// return super.removeEldestEntry(eldest); return this.size()>LINK_HASHMAP_MAX_SIZE; }}
上面的这个条件可以自行设定,还可以增加其他判断条件来处理是否移除最先put进来的.
运行结果如下:
0 0
- Android LRU算法中LinkedHashMap补充 <11>
- LinkedHashMap实现LRU算法
- Android中LruCache到底是如何配合LinkedHashMap实现LRU算法
- Android使用LinkedHashMap实现一个LRU算法的内存缓存
- 利用LinkedHashMap实现LRU算法
- LinkedHashMap实现LRU缓存算法
- 使用 LinkedHashMap 实现 LRU 算法
- 利用LinkedHashMap实现LRU算法缓存
- 轻松扩展LinkedHashMap类实现LRU算法
- 如何用LinkedHashMap实现LRU缓存算法
- 如何用LinkedHashMap实现LRU缓存算法
- 使用LinkedHashMap实现的LRU算法
- LinkedHashMap的实现原理(LRU算法)
- 用LinkedHashMap实现的LRU算法
- 如何用LinkedHashMap实现LRU缓存算法
- 如何用LinkedHashMap实现LRU缓存算法
- LinkedHashMap实现最简单的LRU算法
- 关于LinkedHashMap实现LRU缓存算法
- Backbone 学习笔记
- GitHub 教程系列文章链接地址
- SpringMVC:ModelAndView,model,controller,参数传递
- 质数检测V2
- 【总结】分布式缓存Memcached
- Android LRU算法中LinkedHashMap补充 <11>
- collectionView的各种回调
- java语言特性
- Java书写规范
- Hibernate常用Annotation标签说明
- 【总结】Netty(RPC高性能之道)原理剖析
- redis安装与配置笔记
- 两个例子(来自Storm实战 构建大数据实时计算)
- VC++ 通过剪切板获得文档中的图片