基于Java LinkedList,实现Android大数据缓存策略
来源:互联网 发布:python subprocess 编辑:程序博客网 时间:2024/04/30 09:36
import java.util.HashMap;import java.util.LinkedList;/* * 基于Java LinkedList,实现Android大数据缓存策略 * 作者:Zhang Phil * 原文出处:http://blog.csdn.net/zhangphil * * 实现原理:原理的模型认为:在LinkedList的头部元素是最旧的缓存数据,在LinkedList的尾部是最新的缓存数据。 * 在一个LinkedList(类型C的链表)维护一个存储堆栈,添加元素时候顺序、依次添加。 * *原理实现的具体方案:只要调用缓存的get()方法后,立即将此元素从原先在LinkedList的位置更新到LinkedList最后的位置。 *比如,原先是:1,2,3,4,5。当get了2后,现在的顺序是:1,3,4,5,2。 * * 缓存空间满的情况下,则删除最旧的元素(在最头部),以腾出空间。 * 比如,缓存空间是5,原先缓存已经缓存了5个元素:a,b,c,d,e, * 当再次添加元素 f 时候,因为缓存空间是5容不下6个元素,所以删除最头部的元素a,把f追加到最尾部变成: b,c,d,e,f * * 具体使用:类似于Android的LruCache,对外公开两个通用(通用,意味着可以存Bitmap或者类似的数据)方法供存储和读取使用: * public void put(String key, Object obj); *public Object get(String key); *即通用的<key,value>存储和读取模型。注意:使用者应保证存储时的key唯一。 * */public class CacheBasedOnLinkedList {// Capacity默认的缓存容量private static int CAPACITY = 30;private LinkedList<HashMap<String, Object>> mLinkedList;private final String KEY = "key", VALUE = "value";public CacheBasedOnLinkedList() {init();}public CacheBasedOnLinkedList(int capacity) {CAPACITY = capacity;init();}private void init() {mLinkedList = new LinkedList<HashMap<String, Object>>();}// 动态调整缓存空间大小。// 注意!该方法极可能线程不安全。public void ensureCapacity(int capacity) {if (capacity >= CAPACITY) {// 若比原先大,直接赋值即可// Capacity = capacity;} else {// 若新调整的容量比原先还要小,那么一个一个的删掉头部元素直到相等while (mLinkedList.size() > capacity) {HashMap<String, Object> map = mLinkedList.removeFirst();System.out.println("\n删除-> " + map.get(KEY) + ":"+ map.get(VALUE));}}CAPACITY = capacity;System.out.println("\n重新调整缓存容量为:" + CAPACITY);}// 把需要缓存的数据以<key,value>键值对的形式存入缓存。// 存之前,要检查缓存是否满,满了的话就删除LinkedList第一个元素。public void put(String key, Object obj) {if (mLinkedList.size() < CAPACITY) {} else {HashMap<String, Object> map = mLinkedList.removeFirst();System.out.println("\n缓存空间已满!删除-> " + map.get(KEY) + ":"+ map.get(VALUE));}HashMap<String, Object> map = new HashMap<String, Object>();map.put(KEY, key);map.put(VALUE, obj);mLinkedList.addLast(map);System.out.println("\n缓存-> " + map.get(KEY) + ":" + map.get(VALUE));}// 根据key读出缓存数据// 原理:从头到尾遍历整个链表LinkedList,只要检查到元素中的key和给定的key相同,立即返回。// 同时更新该元素在LinkedList中位置:从原先的位置放到最后一个位置。public Object get(String key) {Object obj = null;for (HashMap<String, Object> map : mLinkedList) {if (map.get(KEY).equals(key)) {System.out.println("读取->" + key + ":" + map.get(VALUE));mLinkedList.remove(map);mLinkedList.addLast(map);return map.get(VALUE);}}return obj;}//// 仅仅是打印输出现在最新的缓存数据情况。//private void out() {//System.out.print("最新缓存情况:");//for (HashMap<String, Object> map : mLinkedList) {//System.out.print(map.get(KEY) + ":" + map.get(VALUE) + ",");//}//}//// 测试//public static void main(String[] args) {//CacheBasedOnLinkedList cache = new CacheBasedOnLinkedList(2);////Random rand = new Random();////for (int i = 0; i < 100; i++) {//cache.ensureCapacity(rand.nextInt(100) + 1);//cache.put(i + "", i);//cache.get(rand.nextInt(100) + "");//cache.out();//}//}}
0 0
- 基于Java LinkedList,实现Android大数据缓存策略
- LinkedList实现基于LRU算法的缓存
- 大数据 memcache缓存序列化太慢策略
- Java:基于LinkedList实现栈和队列
- Java实现基于LinkedList的栈
- Android开发-数据缓存策略的处理
- Java LinkedList 实现原理及数据接口
- 基于LinkedList实现栈
- 缓存策略之LRU实现(基于双链表实现)
- 缓存策略之LRU实现(基于双链表实现)
- 大数据JAVA实现 基于皮尔逊相关系数的相似度
- 利用LinkedHashMap简单实现基于LRU策略的缓存
- 基于“用java.util.*中的LinkedList实现stack” 2.0版
- 自己实现Java中基于双向链表的LinkedList
- ibatis 数据缓存策略
- Hibernate数据缓存策略
- Hibernate数据缓存策略
- 数据缓存策略
- 《c primer plus》编程练习回顾-第三章
- 其他可用的时间函数
- 能pingt通外部的Ip和dns,但上不了网络
- 第一章---网络基础知识
- Leetcode: Min Stack
- 基于Java LinkedList,实现Android大数据缓存策略
- 【成都】增强使用总结
- StringBuilder
- Java虚拟机类加载方式
- Interleaving String
- 动态绑定
- 用户输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- WinDbg调试DMP格式文件
- 解析ISO8583报文实例