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,如果一直没有被调动过的就会越来越往后,直至被清理掉

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值