服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java实现LRU缓存算法的参考示例

Java实现LRU缓存算法的参考示例

2023-05-13 01:05未知服务器之家 Java教程

目录 一、什么是 LRU 二、Java 实现 LRU 缓存算法 一、什么是 LRU LRU ( L east  R ecently  U sed, 最近最少使用 )是一种缓存算法,其核心思想是将最近最少使用的缓存项移除,以便为更常用的缓存项腾出空间。 在实际应用中,LRU 算

目录
  • 一、什么是 LRU
  • 二、Java 实现 LRU 缓存算法

一、什么是 LRU

LRULeast Recently Used,最近最少使用)是一种缓存算法,其核心思想是将最近最少使用的缓存项移除,以便为更常用的缓存项腾出空间。

在实际应用中,LRU 算法被广泛用于缓存和页面置换。

二、Java 实现 LRU 缓存算法

在 Java 中,可以使用 LinkedHashMap 来实现 LRU 缓存算法。
LinkedHashMap 是 HashMap 的一个子类,其内部使用双向链表维护元素的顺序。

具体实现思路如下:

  • 继承 LinkedHashMap,重写 removeEldestEntry 方法,该方法返回 true 表示需要移除最老的缓存项;
  • 在构造方法中指定 accessOrder 为 true,这样在访问元素时就会把该元素移动到链表尾部,方便后续查找和移除;
  • 在访问缓存项时,使用 get 方法获取元素,并通过 removeEldestEntry 方法来判断是否需要移除最老的缓存项;
  • 在添加缓存项时,使用 put 方法将元素加入 LinkedHashMap 中。

 使用 LinkedHashMap 实现 LRU 缓存算法的示例代码如下:

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

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private final int capacity;

    public LRUCache(int capacity) {
        super(capacity, 0.75f, true);
        this.capacity = capacity;
    }

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

    public static void main(String[] args) {
        LRUCache<Integer, String> cache = new LRUCache<>(3);
        cache.put(1, "one");
        cache.put(2, "two");
        cache.put(3, "three");
        System.out.println(cache); // {1=one, 2=two, 3=three}

        cache.get(2);
        System.out.println(cache); // {1=one, 3=three, 2=two}

        cache.put(4, "four");
        System.out.println(cache); // {3=three, 2=two, 4=four}
    }
}

在上面的示例代码中,我们创建了一个 LRUCache 类,继承了 LinkedHashMap,并在构造方法中指定了 accessOrder 为 true。
在 removeEldestEntry 方法中,当缓存项数量超过容量时返回 true,表示需要移除最老的缓存项。
在访问缓存项时,使用 get 方法获取元素,如果缓存项数量超过容量,则会移除最老的缓存项。
在添加缓存项时,使用 put 方法将元素加入 LinkedHashMap 中。
最后,在 main 方法中对缓存进行测试。

需要注意的是,在使用 LinkedHashMap 实现 LRU 缓存时,必须指定 accessOrder 为 true,否则 LinkedHashMap 会按照插入顺序维护元素的顺序,而不是访问顺序。

原文地址:https://blog.csdn.net/aikudexiaohai/article/details/130554371

延伸 · 阅读

精彩推荐