【发布时间】:2021-01-16 03:32:52
【问题描述】:
问题:定义一个固定大小的 LRU 缓存,支持对 E 类型的对象进行分期 O(1) 操作。每个对象都有一个唯一的 id。本题包含问题描述和几种解决方法:LRU cache in Java with Generics and O(1) operations
不起作用的可能解决方案:
只创建一个链表和一个HashMap。维护 LinkedList 和 HashMap
可以通过以下方式从缓存中删除条目:
node = hashmap.get(elem.id);
node.prev.next = node.next;
node.next.prev = node.prev;
hashmap.remove(elem.id)
(为简洁起见,此处忽略极端情况)
这里的问题是 Java 的 LinkedList 类似乎没有公开列表中的各个节点。所以我不能将他们的地址存储在哈希图中。有解决方法吗?大多数现有解决方案都实现了自己的 DoubleLinkedList 类。我可以使用/扩展 Java Collections Framework 中的现有类吗?
【问题讨论】:
-
如果没有构建自己的链表和哈希映射,您可能无法做到这一点。或者您可以专门为此使用
LinkedHashMapconstructor。