zoukankan      html  css  js  c++  java
  • 基于LinkedHashMap实现一个基于LRU算法的缓存设计

    基于LinkedHashMap实现一个基于LRU算法的缓存设计

    1.LinkedHashMap可以认为是HashMap+LinkedList,即它既使用HashMap操作数据结构,又使用LinkedList维护插入元素的先后顺序。
    2.LinkedHashMap的基本实现思想就是----多态。可以说,理解多态,再去理解LinkedHashMap原理会事半功倍;反之也是,对于LinkedHashMap原理的学习,也可以促进和加深对于多态的理解。
    讲一下LinkedHashMap的实现LRU算法

    3.LRU算法:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。

    package collections;
    import java.util.LinkedHashMap;
    /**
     * 基于LinkedHashMap实现一个基于LRU算法的缓存设计
     * 思考:
     * 1)MyBatis中缓存的设计
     * 2)Spring中的缓存设计
     * 3)EhCache中缓存设计
     * 4)redis中缓存设计
     * 5).....................
     * 自定义LruCache实现
     * 1)有容量限制
     * 2)容器满了要基于LRU算法移出元素
     */
    class LruCache extends LinkedHashMap<String,Object>{
    	private static final long serialVersionUID = -1838771409260368496L;
        /**设计缓存的最大容量*/
    	private int maxCapacity;
    	public LruCache(int maxCapacity) {
    		super(maxCapacity,0.75f, true);
    		this.maxCapacity=maxCapacity;
    	}
    	/**
    	 * 方法的返回值决定了容器在满的时是否移除元素.
    	 * true:表示要移除
    	 * false:表示不移除
    	 */
    	@Override
    	protected boolean removeEldestEntry(java.util.Map.Entry<String, Object> eldest) {
    		return size()>maxCapacity;
    	}
    }
    public class TestLinkedHashMap02 {
        public static void main(String[] args) {
    	   LruCache cache=new LruCache(3);
    	   cache.put("A", 100);
    	   cache.put("B", 200);
    	   cache.put("C", 300);
    	   System.out.println(cache);
    	   cache.get("A");
    	   cache.put("D", 400);
    	   System.out.println(cache);//CAD
    	}
    }
    
    

    4.运行结果,LRU算法就是移除不常用的,分析,获取A,放入D,只能存放3个,所以移除B
    运行结果

  • 相关阅读:
    cocos2dx3.1从零学习(二)菜单、场景切换、场景传值
    XCode5添加新建类模板(Cocos2dx Template Class for Scene or Layer)
    根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
    如何学习 cocos2d-x ?
    Java数据类型中String、Integer、int相互间的转换
    Android各种效果集合
    重新生成IE02
    nvl与 is not null的区别等
    自定义view
    select into from 和 insert into select 的用法和区别(转)
  • 原文地址:https://www.cnblogs.com/szls-666/p/12494219.html
Copyright © 2011-2022 走看看