Android HashMap增强版SoftMap,使用软引用
来源:互联网 发布:数控冲床用什么编程 编辑:程序博客网 时间:2024/06/06 03:03
说明:
1)创建个HashMap
/** * 软引用的map集合 * * @author chenlin * * @param <K> * @param <V> */public class SoftMap<K, V> extends HashMap<K, V> { // 降低对象的引用界别——V /** * */ private static final long serialVersionUID = 1L; private HashMap<K, SoftValue<K, V>> temp;// 存放袋子的集合 private ReferenceQueue<V> queue; public SoftMap() { // Object v=new Object();//占用内存较多 // SoftReference sr=new SoftReference(v);//v的引用级别被降低了 // 第一步:将占用内存较多的手机,添加到袋子中 // 第二步:手机被GC回收,清理空袋子 temp = new HashMap<K, SoftValue<K, V>>(); queue = new ReferenceQueue<V>();// 但凡装V的袋子,都可以放到该集合中 } @Override public V put(K key, V value) { // SoftReference<V> sr = new SoftReference<V>(value);// 将手机装到袋子中 // SoftReference(T referent, ReferenceQueue<? super T> q) // 记录回收掉的袋子引用ReferenceQueue SoftValue<K, V> sr = new SoftValue<K, V>(key, value, queue); temp.put(key, sr); return null; } @Override public V get(Object key) { clearDatas(); SoftValue<K, V> sr = temp.get(key); if (sr != null) { // 垃圾回收器清除,则此方法将返回 null。 return sr.get(); } return null; } @Override public boolean containsKey(Object key) { // 什么叫真正的contain // temp.containsKey(key); /* * if(get(key)!=null) { return true; }else{ return false; } */ return get(key) != null; } /** * 清理空袋子 */ @SuppressWarnings("unchecked") private void clearDatas() { // 方式一:循环temp,逐一判断是否有手机,存在问题:如果当前内存够用,循环无用 // 方式二:GC知道把那个袋子的手机给回收了,利用GC,让其记录曾经被偷的手机(存入到集合中) // 如果能够控制该集合,再循环该集合,里面存放的一定被回收了 // 轮询此队列,查看是否存在可用的引用对象。 // 如果存在一个立即可用的对象,则从该队列中"移除"此对象并返回。 // 否则此方法立即返回 null。 SoftValue<K, V> poll = (SoftValue<K, V>) queue.poll(); while (poll != null) { temp.remove(poll.key); poll = (SoftValue<K, V>) queue.poll(); } } /** * 增强版的袋子,增加了key,方便清理操作 * * @author Administrator * * @param <K> * @param <V> */ @SuppressWarnings("hiding") private class SoftValue<K, V> extends SoftReference<V> { private Object key; public SoftValue(K key, V r, ReferenceQueue<? super V> q) { super(r, q); this.key = key; } }}
使用方法:与hashmap的使用方法一致
SoftMap<key,value> sm = new SoftMap<key,value>();sm.put(key,value);sm.get(key);boolean sm.containsKey(key);
0 0
- Android HashMap增强版SoftMap,使用软引用
- android 软引用使用
- android中的hashmap使用
- 引用 java中Map,HashMap使用注意
- Android性能提升之强引用、软引用、弱引用、虚引用使用
- Android性能提升之强引用、软引用、弱引用、虚引用使用
- Android性能提升之强引用、软引用、弱引用、虚引用使用
- Android性能提升之强引用、软引用、弱引用、虚引用使用
- Android性能提升之强引用、软引用、弱引用、虚引用使用
- Android性能提升之强引用、软引用、弱引用、虚引用使用
- Android开发中使用软引用和弱引用
- Android开发中使用软引用和弱引用
- Android内存优化二:使用软引用和弱引用
- Android 软引用和弱引用的使用分析
- Android使用SparseArray取代HashMap
- android使用软引用构建缓存
- android使用软引用构建缓存
- Android增强版倒计时控件
- WebService中注解开发,CXF,Spring整合,Rest风格
- 345Reverse Vowels of a String
- [剑指offer]最小的K个数
- nrf52832 --- nfc脚做GPIO口
- Activity的几种状态
- Android HashMap增强版SoftMap,使用软引用
- App Xutil框架
- HTTP POST请求报文格式分析与Java实现文件上传
- HDU 5667 Sequence【矩阵快速幂+费马小定理】
- synthesize
- Android webView 支持缩放及自适应屏幕
- Spring AOP之通过xml定义aop
- PAT1009 说反话 (20)
- HDU 5667 Sequence(数论+矩阵快速幂)