LinkedHashMap实现最简单的LRU算法

来源:互联网 发布:人生遥控器 知乎 编辑:程序博客网 时间:2024/05/17 08:28
LRU是Least Recently Used 近期最少使用算法。
内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,Oracle会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
LinkedHashMap有一个removeEldestEntry(Map.Entry eldest)方法,通过覆盖这个方法,加入一定的条件,满足条件返回true。当put进新的值方法返回true时,便移除该map中最老的键和值。
package scorpio.jh.maptest;import java.util.LinkedHashMap;import java.util.Map;public class LinkedHashMapTest { public static void main(String[] args) {      Map map = new FixedSizeLinkedHashMap();    System.out.println(map.size());    for(int i = 0; i < 50; i++) {       map.put(i, true);       System.out.println(map.size());       System.out.println(map);    } }}class FixedSizeLinkedHashMap extends LinkedHashMap{  private static final long serialVersionUID = 6918023506928428613L; private static int MAX_ENTRIES = 10; /**  * 获得允许存放的最大容量  * @return int  */ public static int getMAX_ENTRIES() {  return MAX_ENTRIES; } /**  * 设置允许存放的最大容量  * @param int max_entries  */ public static void setMAX_ENTRIES(int max_entries) {  MAX_ENTRIES = max_entries; } /**  * 如果Map的尺寸大于设定的最大长度,返回true,再新加入对象时删除最老的对象  * @param Map.Entry eldest  * @return int  */ protected boolean removeEldestEntry(Map.Entry eldest) {        return size() > MAX_ENTRIES;     }}
 
0 0
原创粉丝点击