通过LinkedHashMap的源码可以知道,在LinkedHashMap构造方法中,多了一个AccessOrder字段,这是一个Boolean类型字段,标识插入数据的排序类型(false 为插入顺序,true为访问顺序),所以这里我们需要设置为true。
LinkedHashMap<String, Object> map = new LinkedHashMap<>(16, 0.75f, true);
map.put("a", 1);
map.put("b", 2);
map.put("c1", 3);
map.put("c2", 4);
map.put("c3", 5);
map.put("c4", 6);
map.put("c5", 7);
map.put("c6", 8);
map.put("c7", 9);
map.put("c8", 10);
map.put("c9", 11);
map.put("1c", 12);
map.put("2c", 13);
map.put("3c", 14);
map.put("4c", 15);
map.put("5c", 16);
System.out.println("get" + map);
map.put("a22", 17);
map.get("c3");
System.out.println("get" + map);
3
package com.xdf.xcloud.api.utils;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
/**
* Copyright (c) 2021, xdf All rights reserved.
* @author: yaoxianliang
* @date: 2021/09/03 10:12:24
* @Description:
*/
public class LRUCacheUtil<K, V> extends LinkedHashMap<K, V>{
private static final long serialVersionUID = 1L;
private int maxsize;
public LRUCacheUtil(int maxsize) {
super(maxsize, 0.75f, true);
this.maxsize = maxsize;
}
@Override
protected boolean removeEldestEntry(Entry<K, V> eldest) {
return (size() > maxsize);
}
public static void main(String[] args) {
LRUCacheUtil<String, Object> cache = new LRUCacheUtil<>(5);
cache.put("a", 1);
cache.put("b", 2);
cache.put("c", 3);
cache.put("d", 4);
cache.put("e", 5);
System.out.println("get" + cache);
cache.put("f", 6);
System.out.println("get" + cache);
}
}