Это LRUMap
расширяет LinkedHashMap
, в котором содержится связанный список записей Map
в порядке, в котором были вставлены ключи (первый ключ является первым ключом, добавленным к Map
).
Когда вы реализуете структуру данных, которая использовалась в последнее время, вы хотите знать, какой элемент использовался в последнее время.Это элемент, который вы сначала удалите, когда исчерпаете пространство.
Теперь, если мы посмотрим на LinkedHashMap
Javadoc:
Эта реализация отличается от HashMap тем, что онаподдерживает двусвязный список, проходящий через все его записи.Этот связанный список определяет порядок итераций, который обычно является порядком, в котором ключи были вставлены в карту (порядок вставки). Обратите внимание, что порядок вставки не изменяется, если ключ повторно вставлен в карту.(Ключ k повторно вставляется в карту m, если m.put (k, v) вызывается, когда m.containsKey (k) возвращает true непосредственно перед вызовом.)
Мы видим, что вызов put(k,v)
для ключа, уже присутствующего в Map
, не влияет на порядок вставки.
Поэтому, когда вы получаете доступ к ключу Map
, вы должны сначала удалить егоиз LinkedHashMap
, а затем снова добавьте его, переместив его в конец связанного списка и фактически пометив его как последний использованный ключ (который является последним вставленным ключом).
Обратите внимание, чтометод set()
также вызывает get()
, что означает, что он также перемещает ключ в конец связанного списка, если он уже был в Map
.