您的位置:首页 > 编程语言 > Java开发

LRU (Least Recently Used) 算法的Java实现

2015-12-17 11:48 513 查看
转自:/article/2696223.html

package com.zeus.webcrawler.tool;

import java.util.LinkedHashMap;
import java.util.Map;

/**
* LRU (Least Recently Used) 算法的Java实现
* @param <K>
* @param <V>
* @author 杨尚川
* /article/2696223.html
*/
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
//缓存大小
private int cacheSize;

public LRUCache(int cacheSize) {
//LRU算法 第三个参数true是关键
super(10, 0.75f, true);
this.cacheSize = cacheSize;
}

/**
* 缓存是否已满的判断,Map判断是否满时调用的函数
* @param eldest
* @return
*/
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
boolean r = size() > cacheSize;
if(r){
System.out.println("removeEldestEntry清除边界 清除缓存:"+eldest.getKey());
}else{
System.out.println("removeEldestEntry 不清除边界 ");
}
return r;
}

public static void main(String[] args) {
LRUCache<String, String> cache = new LRUCache<>(5);
cache.put("1", "1");
cache.put("2", "2");
cache.put("3", "3");
cache.put("4", "4");
cache.put("5", "5");

System.out.println("初始:");
cache.keySet().forEach(k -> System.out.print(k+" "));
System.out.println();
System.out.println("访问2:");
cache.get("2");
cache.keySet().forEach(k -> System.out.print(k+" "));
System.out.println();
System.out.println("访问2、3:");
cache.get("2");
cache.get("3");
cache.keySet().forEach(k -> System.out.print(k+" "));
System.out.println();
System.out.println("增加数据6、7:");
cache.put("6", "6");
cache.put("7", "7");
cache.keySet().forEach(k -> System.out.print(k+" "));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: