Comment implémenter l'algorithme de mise en cache LRU à l'aide de Java
Introduction :
Dans le domaine de l'informatique, la mise en cache est une technique d'optimisation couramment utilisée pour augmenter la vitesse de lecture et d'écriture des données. LRU (Least Récemment Utilisé) est une stratégie courante de remplacement du cache qui détermine s'il convient de supprimer les données du cache en fonction de l'heure à laquelle les données ont été récemment consultées. Cet article explique comment implémenter l'algorithme de cache LRU à l'aide du langage Java et fournit des exemples de code détaillés.
Tout d'abord, nous définissons une classe de nœuds de liste doublement chaînée.
class Node { int key; int value; Node prev; Node next; public Node(int key, int value) { this.key = key; this.value = value; } }
Ensuite, nous définissons une classe LRUCache pour implémenter l'algorithme de cache LRU.
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 } }
Sortie du résultat :
1
-1
-1
3
4
Résumé :
Cet article présente comment utiliser le langage Java pour implémenter l'algorithme de cache LRU. En utilisant des structures de données de liste doublement chaînée et de table de hachage, nous pouvons implémenter les fonctions de base de l'algorithme de cache LRU, et des exemples de code détaillés sont fournis. Les lecteurs peuvent le modifier et l'étendre en fonction des besoins réels pour répondre à différents scénarios d'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!