说明:
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);

更多相关文章

  1. Android(安卓)实时视频采集—Cameara预览采集
  2. get方式和post方式的请求
  3. android利用Serialization向服务器端发送任意的文件(二)
  4. 用Socket实现PC和手机的文件传输
  5. Android实现自动轮播图效果
  6. Android中实现输入图片地址浏览图片操作
  7. 【Android小经验】 ListView列中的一个ITEM值
  8. Android(java)学习笔记63:线程的调度
  9. Android(安卓)Runnable 用法

随机推荐

  1. Android(安卓)Activity的各种重载方法
  2. android 呼入电话的监听(来电监听)
  3. Android电源管理简介(下)
  4. 【原创】窥视懒人的秘密---android下拉刷
  5. Android(安卓)NFC架构分析
  6. android 笔记 --- Android中开发中常用代
  7. android安装配置
  8. Android(安卓)UI开发第五篇——自定义列
  9. TextView
  10. android 布局相关