LoginSignup
0
2

More than 5 years have passed since last update.

[Javaの小枝] LinkedHashMapを使ったLRUキャッシュ

Last updated at Posted at 2016-12-08

内容はないよう

タイトルにあるように LinkedHashMap を用いて LRU キャッシュを簡単に作成できる、というのを何かで以前読んで記憶していた。LinkedHashMapはキーの順序を保持するタイプのマップで、キーの順序には「挿入順モード」と「アクセス順モード」の二つが存在する。LRUキャッシュの部品として使う場合、後者のアクセス順モードにてキーを保持すれば良い、という訳だ。

で、今回仕事で LRU キャッシュを使う必要があり、確認のため JavaDoc を見ると著しく不安をかきたてる日本語が書かれていた…

LinkedHashMap_j.png

「アクセス順のリンク・ハッシュ・マップでは get でマップを照会することだけが構造的変更です。」
なんだとっ!! もしかして put しても構造的変更(=キー順序の入れ替え)にならない?

思わず検証してしまった。(-_-;; 当然そんなことはなかった。(-_-;;

対応する英語版は以下の通り。「単なるgetクエリだけでも構造的変更となります」と書かれている。つまりは get と put の両方で構造的変更が発生する。

LinkedHashMap_e.png

日本語版にいろいろ誤訳があるのは諦観の念を持ってはいるが、このレベルの誤訳はさすがに不安になるのでかんべんしてほしい。まとめると、LRUキャッシュを作成する際、安心して以下のように書いてかまわない。

Lru.java
Map<String, Long> lruCache = new LinkedHashMap<String, Long>(16, 0.75f, true)
0
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2