铁匠 铁匠
首页
golang
java
架构
常用算法
  • Java
  • nginx
  • 系统运维
  • 系统安全
  • mysql
  • redis
参考文档
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

铁匠

不予评判的专注当下
首页
golang
java
架构
常用算法
  • Java
  • nginx
  • 系统运维
  • 系统安全
  • mysql
  • redis
参考文档
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 常用算法 - lru cache
    • java 实现
  • alg
FengJianxin
2022-04-14
目录

常用算法 - lru cache

# lru cache

LRU (最近最少使用) (opens new window) 是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。

leetcode: https://leetcode.cn/problems/lru-cache/ (opens new window)

# java 实现


import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author FengJianxin
 * @since 2022/3/7
 */
public class LruCache extends LinkedHashMap<String, Object> implements Cache {

    private final int capacity;

    public LruCache(int capacity) {
        super(capacity, 0.75F, true);
        this.capacity = capacity;
    }

    @Override
    public void set(String key, Object value) {
        super.put(key, value);
    }

    @Override
    public Object get(String key) {
        return getOrDefault(key, null);
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<String, Object> eldest) {
        return super.size() > capacity;
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

LinkedHashMap 每次调用 get 方法都会将数据移动到链表末尾。每次添加元素时,如果 removeEldestEntry 方法返回 true,则会删除第一个链表元素

#lru cache
Last Updated: 2024/04/23, 01:30:37
最近更新
01
go-kit学习指南 - 多协议支持
04-19
02
go-kit学习指南 - 中间件
04-19
03
go-kit开发微服务 - 服务注册与发现
04-19
更多文章>
Theme by Vdoing | Copyright © 2016-2024 铁匠 | 粤ICP备15021633号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式