2016-02-16 2 views
1

Я пытался реализовать LRU Cache с использованием HashMap и дважды связанного списка. Я думал о создании следующего класса: -LRU Cache - Как объявить ссылку на элементы списка

public class LRUCache { 
    List<V> list; // LinkedList() 
    Map<K, <Reference to list elements/nodes?>> map; // Hashtable() 
} 

Я планировал использовать класс LinkedList, как дважды связанный список и класс Hashtable для хранения. Однако я не уверен, как объявить или определить ссылку на внутренние элементы узла в списке?

Ниже приведено использование внутреннего класса Node для реализации. Это связано с инкапсуляцией класса LinkedList, что вы не можете получить доступ к внутренним полям данных?

Я знаю, что мое понимание частично правильно, но нужно некоторое подтверждение. Я пытался решить эту проблему на leetcode, но из-за этой проблемы я застрял долго.

http://www.programcreek.com/2013/03/leetcode-lru-cache-java/

LRU cache in Java with Generics and O(1) operations

// snippet below 
public class LRUCache<K, V>{ 

// Define Node with pointers to the previous and next items and a key, value pair 
class Node<T, U> { 

ответ

0

Нет, вы не можете делать то, что вы пытаетесь сделать в Java; вы не можете получить доступ к внутренним узлам LinkedList. Что вы можете сделать, это использовать LinkedHashMap в LRU mode, а затем переопределить removeEldestEntry, чтобы ограничить размер кеша.

+0

Это связано с инкапсуляцией, правильно? Это означает, что если я хочу написать это с нуля, мне нужно определить мой собственный класс Node, который позже можно будет использовать в качестве ссылки. – jaamit

Смежные вопросы