Java笔试---LRU缓存

今天笔试碰到一题 用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,如果一直没有被调动过的就会越来越往后,直至被清理掉

第一次写,看起来好傻,哈哈哈

发布了35 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/m0_37628958/article/details/80171128
今日推荐