基于LinkedHashMap实现FIFO(先进先出)淘汰算法
程序员文章站
2024-03-18 08:41:52
...
package com.bingo.frame;
import java.util.LinkedHashMap;
/**
* b.基于LinkedHashMap实现FIFO(先进先出)淘汰算法
* @author bingo
*/
public class BingoTest {
class SimpleFIFOCache extends LinkedHashMap<Object, Object> {
private int maxCap;
public SimpleFIFOCache(int maxCap) {
//防止扩容: (int)(maxCap/0.75+1)
super((int)(maxCap/0.75+1), 0.75f, false);//true:记录访问顺序, false:记录插入顺序
this.maxCap = maxCap;
}
/**
* 返回值通知map对象是否移除元素
* 1. true移除
* 2. false不移除
* 3. 此方法在put方法执行时调用
*/
@Override
protected boolean removeEldestEntry(java.util.Map.Entry<Object, Object> eldest) {
if (size() > maxCap) {
return true;
}
return false;
}
}
public static void main(String[] args) {
SimpleFIFOCache fifoCache = new BingoTest().new SimpleFIFOCache(5);
fifoCache.put("A", 100);
fifoCache.put("B", 100);
fifoCache.put("C", 100);
fifoCache.put("D", 100);
fifoCache.put("E", 100);
fifoCache.put("F", 100);
//超过最大容量, 开始移除元素
fifoCache.get("A");
System.out.println(fifoCache);
fifoCache.get("B");
fifoCache.put("G", 100);
System.out.println(fifoCache);
fifoCache.get("C");
fifoCache.put("H", 100);
System.out.println(fifoCache);
// 控制台输出:
// {B=100, C=100, D=100, E=100, F=100}
// {C=100, D=100, E=100, F=100, G=100}
// {D=100, E=100, F=100, G=100, H=100}
}
}
上一篇: Andlua中数据包的提交