LinkedHashMap 实现“最近最少使用”的原则,PriorityQueue优先级

本文介绍如何利用LinkedHashMap实现LRU缓存策略,通过重写removeEldestEntry方法来控制缓存条目的更新与淘汰。此外,还介绍了优先级队列PriorityQueue的使用方法,展示了如何按优先级顺序删除队列中的元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每次调用get或put,收到影响的条目将从当前位置删除,并放到条目链表的尾部(只影响条目在链表中的位置)
可以实现“最近最少使用”的原则。重写removeEldestEntry
假如你希望将访问频率高的放到内存中,频率低的删除。只需删除链表的前面条目即可;
当然还可以对eldest条目进行评估,以此决定是否应该删除。
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)

public static void main(String[] args) {
        Map<String,Integer> dd=new LinkedHashMap<String,Integer>(10,0.75f,true){
            // return true 删除频率低的
            protected boolean removeEldestEntry(Map.Entry<String,Integer> eldest) {
                //eldest == 22:2  22是最先放进来的
                return size()>3;
            }
        };
        dd.put("22",2);
        dd.put("55",5);
        dd.put("66",6);
        dd.get("22");//调用22 ,那么55就是频率低的,在put “77”时 ,size()>3 返回true ;因此删除 “55”
        dd.put("77",7);
        System.out.println(dd.keySet());//out : [66, 22, 77]
        dd.get("66");
        System.out.println(dd.keySet());//out : [22, 77, 66]
    }

下面是优先级队列PriorityQueue;迭代不是按照元素的排列顺序访问。删除总是删掉列表中优先级数最小的那个元素

public static void main(String[] args) {
        PriorityQueue<LocalDate> pq=new PriorityQueue<>();
        pq.add(LocalDate.of(1906,12,9));
        pq.add(LocalDate.of(1815,12,9));
        pq.add(LocalDate.of(1903,12,9));
        pq.add(LocalDate.of(1910,12,9));

        System.out.println("Iterating elements...");
        for (LocalDate ld:pq)
            System.out.println(ld);//迭代不是按照元素的排列顺序访问。
        System.out.println("Removing elements...");

        while (!pq.isEmpty())
            System.out.println(pq.remove());//删除总是删掉列表中优先级数最小的那个元素
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值