今天笔试碰到一题 用java简单实现LRU缓存,当时就蒙了,很尬
然后学习下LRU缓存,留个记录
LRU(Least Recently Used)最近最少使用 就是说将最近最近频繁使用的留下来,很久没用或者很少用的淘汰掉
原理是:最近经常使用的,下一次使用的概率很大
package temp; import java.util.ArrayList; import java.util.Iterator; import java.util.List; //将最近不使用的淘汰掉 //用链表实现原理,将最近使用的放到头部,最 //近新加的放到头部,这样尾部的数据就是近期没有被访问过得了 //我们认为list只能容纳100个数据 public class LRU { private static int SIZE=100; public static List<String> list = new ArrayList<String>(); public static void main(String[] args) { // TODO Auto-generated method stub } //向LRU加入数据 //list会自动将数据放在头部 public void put_LRU(String str) { list.add(str); } //限制LRU的容量 //超过SIZE个数就清除掉 private static void capacity_LRU() { Iterator<String> iterator = list.iterator(); int i = 0; while(iterator.hasNext()) { i++; if(i>SIZE) iterator.remove(); } } public boolean fangwen_LRU(String str) { //确保容量只有100 LRU.capacity_LRU(); if(LRU.have_LRU(str)) { list.add(str);return true; }return false; } //判断是否有str元素,是 返回true否则返回false private static boolean have_LRU(String str) { //确保容量只有100 LRU.capacity_LRU(); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { if(iterator.next().equals(str)) { iterator.remove(); return true; } } return false; } }总共外部可以访问的两个public函数
public void put_LRU(String str) public void fangwen_LRU(String str)这分别代表新加的缓存,和之前的缓存重新访问
原理:
新加的放在链表头,访问原来的,吧原来的调到链表头,限制长度为100,如果一直没有被调动过的就会越来越往后,直至被清理掉
第一次写,看起来好傻,哈哈哈
