
如何使用Java实现LRU缓存算法
引言:
在计算机科学领域,缓存是一种常用的优化技术,用于提高数据读取和写入的速度。LRU(Least Recently Used)是一种常见的缓存替换策略,它根据数据最近被访问的时间来决定是否从缓存中移除数据。本文将介绍如何使用Java语言实现LRU缓存算法,并提供详细的代码示例。
首先,我们定义一个双向链表节点类。
class Node {
int key;
int value;
Node prev;
Node next;
public Node(int key, int value) {
this.key = key;
this.value = value;
}
}然后,我们定义一个LRUCache类来实现LRU缓存算法。
立即学习“Java免费学习笔记(深入)”;
import java.util.HashMap;
class LRUCache {
private int capacity;
private HashMap<Integer, Node> map;
private Node head;
private Node tail;
public LRUCache(int capacity) {
this.capacity = capacity;
this.map = new HashMap<>();
// 创建虚拟头节点和尾节点
this.head = new Node(0, 0);
this.tail = new Node(0, 0);
this.head.next = this.tail;
this.tail.prev = this.head;
}
public int get(int key) {
if (map.containsKey(key)) {
Node node = map.get(key);
removeNode(node);
addToHead(node);
return node.value;
}
return -1;
}
public void put(int key, int value) {
if (map.containsKey(key)) {
Node node = map.get(key);
node.value = value;
removeNode(node);
addToHead(node);
} else {
if (map.size() == capacity) {
map.remove(tail.prev.key);
removeNode(tail.prev);
}
Node newNode = new Node(key, value);
map.put(key, newNode);
addToHead(newNode);
}
}
private void removeNode(Node node) {
node.prev.next = node.next;
node.next.prev = node.prev;
}
private void addToHead(Node node) {
node.prev = head;
node.next = head.next;
head.next.prev = node;
head.next = node;
}
}public class Main {
public static void main(String[] args) {
LRUCache cache = new LRUCache(2);
cache.put(1, 1);
cache.put(2, 2);
System.out.println(cache.get(1)); // 输出 1
cache.put(3, 3);
System.out.println(cache.get(2)); // 输出 -1
cache.put(4, 4);
System.out.println(cache.get(1)); // 输出 -1
System.out.println(cache.get(3)); // 输出 3
System.out.println(cache.get(4)); // 输出 4
}
}结果输出:
1
-1
-1
3
4
总结:
本文介绍了如何使用Java语言实现LRU缓存算法。通过使用双向链表和哈希表数据结构,我们可以实现LRU缓存算法的基本功能,并提供了详细的代码示例。读者可以根据实际需求进行修改和扩展,以满足不同的应用场景。
以上就是如何使用java实现LRU缓存算法的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号