欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于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}
		
	}
	
}