java linkedHashMap实现lru


java linkedHashMap实现lru

 

 

*************************

相关类

 

linkedHashMap

public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {

    final boolean accessOrder; //链表的排列顺序
                               //flase(默认):表示按插入顺序排序
                               //true:表示按访问顺序排序,最新访问的节点在链表尾部

    public LinkedHashMap() {
        super();
        accessOrder = false;
    }

    public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder) {
        super(initialCapacity, loadFactor);
        this.accessOrder = accessOrder;
    }   //通过该构造函数将accessOrder设为true,表示按访问顺序排序

    protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        return false;
    }   //删除最早的元素,默认为false,若设置为true则可将队列头部的节点删除

 

 

*************************

示例

 

class LRUTest<K,V> extends LinkedHashMap<K,V>{

    private int num;

    public LRUTest(int num){
        super(16,0.75f,true);
        this.num=num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > num;
    }
}

public class MyTest9 {

    public static void main(String[] args){
        LRUTest<String,String> lruTest=new LRUTest<>(10);
        for (int i=0;i<100;i++){
            lruTest.put(i+"","瓜田李下"+i);
        }

        for(Map.Entry<String,String> entry:lruTest.entrySet()){
            System.out.println("key:"+entry.getKey()+" ====> value:"+entry.getValue());
        }

        System.out.println("\nkey为98对应的value:"+lruTest.get("98"));
        System.out.println("访问key为98的节点后输出 \n");

        for (Map.Entry<String,String> entry:lruTest.entrySet()){
            System.out.println("key:"+entry.getKey()+" ====> value:"+entry.getValue());
        }
    }
}

 

******************

控制台输出

 

key:90 ====> value:瓜田李下90
key:91 ====> value:瓜田李下91
key:92 ====> value:瓜田李下92
key:93 ====> value:瓜田李下93
key:94 ====> value:瓜田李下94
key:95 ====> value:瓜田李下95
key:96 ====> value:瓜田李下96
key:97 ====> value:瓜田李下97
key:98 ====> value:瓜田李下98
key:99 ====> value:瓜田李下99

key为98对应的value:瓜田李下98
访问key为98的节点后输出 

key:90 ====> value:瓜田李下90
key:91 ====> value:瓜田李下91
key:92 ====> value:瓜田李下92
key:93 ====> value:瓜田李下93
key:94 ====> value:瓜田李下94
key:95 ====> value:瓜田李下95
key:96 ====> value:瓜田李下96
key:97 ====> value:瓜田李下97
key:99 ====> value:瓜田李下99
key:98 ====> value:瓜田李下98

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值