使用LinkedHashMap实现LRU

使用LinkedHashMap是有序的,并且查找的效率可以达到O(1),所以使用LinkedHashMap()来实现lru,还是很方便的

大致思路:   首先标记元素长度n,初始为0,如果要换入2,先map.get(2)不存在且map的元素个数小于 块数,则放入map中,n++

如果map中有这个元素,那么则删除,在放入;

import java.util.LinkedHashMap;
import java.util.Map;
/*
 * lru
 */
public class Lru {
	public static void main(String[] args) {
		Map<Integer,Integer> map=new LinkedHashMap<>();
		int n=3;//块数
		int count=0;//中断次数
		int lenth=0;//map元素个数
		int[] arr={3,4,3,1,2};
		for(int i=0;i<arr.length;i++){
			if(lenth<n && map.get(arr[i])==null){
				map.put(arr[i], 0);
				lenth++;
				count++;
			} else{
				if(map.get(arr[i])==null){
					for(Integer one:map.keySet()){
						
						map.remove(one);
						break;
					}
					map.put(arr[i], 0);
					count++;
					
				}else{
					map.remove(arr[i]);
					map.put(arr[i], 0);
				}
			}
			
		}
		for(Map.Entry<Integer, Integer> one:map.entrySet()){
			System.out.println(one.getKey());
			
		}
		System.out.println("count:"+count);
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39512671/article/details/82905717