LinkedList实现基于LRU算法的缓存
版权声明:本文为博主原创文章,遵循版权协议,转载请附上原文出处链接和本声明。
本文链接:
学过操作系统的人都知道LRU页面切换算法,其实这个算法不仅仅只是能在页面切换中应用到,在缓存中也有很实际的应用。最典型的实现方式是采用LinkedHashMap来实现这个缓存,大家可以在Java源码里面看到这个类的作者关于这个的描述,不过全是英文,但是却明确提到过。
下面废话不多说,直接展示我自己关于这个算法实现的代码吧,亲测通过:
核心算法代码:
package hk.inso.www.cache;import java.util.Hashtable;import java.util.LinkedList;/** * Created by IntelliJ IDEA. * Date: 8/7/15 4:46 PM * Author: Richard */public class LinkedListCache
测试代码:
package hk.inso.www.test;import hk.inso.www.cache.LRUCache;import hk.inso.www.cache.LinkedListCache;import hk.inso.www.cache.MapCache;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;/** * Created by Richard on 8/5/15. */public class CacheTest { public static void main(String[] args) throws InterruptedException { LinkedListCache linkedListCache = new LinkedListCache(5); linkedListCache.put("1"); System.out.println(linkedListCache.toString()); Thread.sleep(1000); linkedListCache.put("2"); System.out.println(linkedListCache.toString()); Thread.sleep(1000); linkedListCache.put("3"); System.out.println(linkedListCache.toString()); Thread.sleep(1000); linkedListCache.put("4"); System.out.println(linkedListCache.toString()); Thread.sleep(1000); linkedListCache.put("5"); System.out.println(linkedListCache.toString()); Thread.sleep(1000); linkedListCache.put("1"); System.out.println(linkedListCache.toString()); Thread.sleep(1000); linkedListCache.put("6"); System.out.println(linkedListCache.toString()); Thread.sleep(1000); linkedListCache.put("4"); System.out.println(linkedListCache.toString()); Thread.sleep(1000); linkedListCache.put("7"); System.out.println(linkedListCache.toString()); }}
不要吐槽这个哈,时间关系,就直接这么演示了,你可以直接拷贝下来运行就可以了。希望可以帮到你!