基于Java LinkedList,实现Android大数据缓存策略

简介: import java.util.HashMap;import java.util.LinkedList;/* * 基于Java LinkedList,实现Android大数据缓存策略 * 作者:Zhang Phil * 原文出处:http://blog.csdn.net/zhangphil * * 实现原理:原理的模型认为:在LinkedList的头部元素是最旧的缓存数据,在LinkedList的尾部是最新的缓存数据。

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();
//		}
//	}
}

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
11月前
|
存储 供应链 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业供应链风险预警与决策支持中的应用(204)
本篇文章探讨了基于 Java 的大数据可视化技术在企业供应链风险预警与决策支持中的深度应用。文章系统介绍了从数据采集、存储、处理到可视化呈现的完整技术方案,结合供应链风险预警与决策支持的实际案例,展示了 Java 大数据技术如何助力企业实现高效、智能的供应链管理。
|
11月前
|
存储 SQL Java
Java 大视界 -- Java 大数据在智能医疗手术风险评估与术前方案制定中的应用探索(203)
本文探讨了Java大数据技术在智能医疗手术风险评估与术前方案制定中的创新应用。通过多源数据整合、智能分析模型构建及知识图谱技术,提升手术风险预测准确性与术前方案制定效率,助力医疗决策智能化,推动精准医疗发展。
|
12月前
|
机器学习/深度学习 Java 大数据
Java 大视界 -- Java 大数据在智能政务公共资源交易数据分析与监管中的应用(202)
本篇文章深入探讨了 Java 大数据在智能政务公共资源交易监管中的创新应用。通过构建高效的数据采集、智能分析与可视化决策系统,Java 大数据技术成功破解了传统监管中的数据孤岛、效率低下和监管滞后等难题,为公共资源交易打造了“智慧卫士”,助力政务监管迈向智能化、精准化新时代。
|
12月前
|
数据采集 机器学习/深度学习 Java
Java 大视界 -- Java 大数据在智能体育赛事运动员体能监测与训练计划调整中的应用(200)
本篇文章聚焦 Java 大数据在智能体育赛事中对运动员体能监测与训练计划的智能化应用。通过构建实时数据采集与分析系统,结合机器学习模型,实现对运动员体能状态的精准评估与训练方案的动态优化,推动体育训练迈向科学化、个性化新高度。
|
12月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
12月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
12月前
|
传感器 Java 大数据
Java 大视界 -- 基于 Java 的大数据实时数据处理在车联网车辆协同控制中的应用与挑战(197)
本文深入探讨了基于 Java 的大数据实时数据处理在车联网车辆协同控制中的关键应用与技术挑战。内容涵盖数据采集、传输与实时处理框架,并结合实际案例分析了其在车辆状态监测、交通优化与协同驾驶中的应用效果,展示了 Java 大数据技术在提升交通安全性与效率方面的巨大潜力。
|
12月前
|
存储 搜索推荐 算法
Java 大视界 -- Java 大数据在智慧文旅旅游线路规划与游客流量均衡调控中的应用实践(196)
本实践案例深入探讨了Java大数据技术在智慧文旅中的创新应用,聚焦旅游线路规划与游客流量调控难题。通过整合多源数据、构建用户画像、开发个性化推荐算法及流量预测模型,实现了旅游线路的精准推荐与流量的科学调控。在某旅游城市的落地实践中,游客满意度显著提升,景区流量分布更加均衡,充分展现了Java大数据技术在推动文旅产业智能化升级中的核心价值与广阔前景。
|
12月前
|
存储 搜索推荐 算法
Java 大视界 -- Java 大数据在智能金融理财产品风险评估与个性化配置中的应用(195)
本文深入探讨了Java大数据技术在智能金融理财产品风险评估与个性化配置中的关键应用。通过高效的数据采集、存储与分析,Java大数据技术助力金融机构实现精准风险评估与个性化推荐,提升投资收益并降低风险。
Java 大视界 -- Java 大数据在智能金融理财产品风险评估与个性化配置中的应用(195)
|
Java
LinkedList源码解读—Java8版本(下)
LinkedList源码解读—Java8版本(下)
279 0

热门文章

最新文章