質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

Q&A

1回答

1643閲覧

JavaでLRUを実装したい

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

0グッド

1クリップ

投稿2021/06/28 03:27

編集2021/06/28 03:55

JavaでLRUを実装したいです。

ソースコードを調べても何もわかりません。

LinkedHashMapのライブラリのコードを少しいじっただけのつもりなんですが、なぜ思ったように動かないのでしょうか?

想定ではLruChaceコンストラクタにsizeを渡して呼び出せばキャッシュサイズが変更されると考えているのですが

補足情報(FW/ツールのバージョンなど)

Eclipse

Java

1コード 2package kadai2; 3import java.util.LinkedHashMap; 4import java.util.Map; 5 6public class Main { 7 public static void main(String[] args) { 8 LruCache lru = new LruCache("A","dataA"); 9 } 10 11 private static void LruCache(String string, String string2) { 12 13 } 14 15} 16 17 class LruCache<K, V> extends LinkedHashMap<K, V> { 18 int limit; 19 20 public LruCache(int size) { 21 super(16, 0.75F, true); 22 limit = size; 23 } 24

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/06/28 03:45

コードはマークダウンのcodeにてご提示ください。 あとコードは書いたとおりにしか動かないわけですが、どういう動作を想定していて何が起きているのか具体的に記載してください。 また、ライブラリとは具体的にどれですか? 見たところ単にHashMapを定義しているだけに見えます。 なんのためのなんの役割を持った機能にしようとしていますか? 自身がわかっていることをきちんと説明してください
m.ts10806

2021/06/28 04:18

>LinkedHashMapのライブラリのコード それはどこですか?URLを。 そもそもLinkedHashMapは単にJava標準機能であってライブラリと呼ぶほどのものではないかと。 LRUとの関連性も不明です。 >キャッシュサイズが変更されると考えているのですが が、何が起きてますか?
退会済みユーザー

退会済みユーザー

2021/06/28 05:35

https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html です。 LRUをLinkedHashMapを使って実装しようとしています。 キャッシュが変更されたかの確認のしかたがわかりません。 正直何がわかっていないのかを説明するのもやっとの状況です。
m.ts10806

2021/06/28 05:52 編集

>https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html です。 それはあくまでAPIドキュメントですね。 java.utilもデフォルト機能なのでやはりライブラリという表現は違うと思います。 ただいずれにしても「なぜ思ったとおりに動かないのか」と書かれているので、具体的にゴールが見えている(確認の仕方もわかっていてその結果できていないことが把握できている)という印象を受けています。 どうなるものかを理解できてないとそもそも設計にすら落とし込めないと思いますが、なんのためにこれをやろうとしてるんでしょうか? 本当に何もわからない状況でできるものでもないと思います。
dodox86

2021/06/28 05:54

> 想定ではLruChaceコンストラクタにsizeを渡して呼び出せばキャッシュサイズが変更されると考えているのですが えと、それが解決すれば質問者さんがの望むLRUキャッシュが完成するわけでないですよね。 キャッシュが変更されたかどうかの判定の前にそもそもLRU(Least Recently Used)をどう実装するか、なのではないでしょうか。単純に考えると、新規に使用されたか直近で再使用されたものを先頭に持ってくるようにして、溢れたら過去のものを削除、リストの操作で変更をしたならば即ちそれは変更があったということでしょう。 今の質問内容ではとりあえず何を最初に解決したいのか読んだ者には分からない気がします。ご提示のコードも中途で、何をポイントに聞きたいのかちょっと分かりづらいようです。 > 正直何がわかっていないのかを説明するのもやっとの状況です。 まぁ、恐らくはこれが問題なのでしょうけれども。LRUを理解するところからでは。
dodox86

2021/06/28 05:57

(LinkedHashMapじゃないような気がするのだけども...やってやれないこともないでしょうけど)
guest

回答1

0

removeEldestEntryをオーバーライドしてみるのはいかがでしょうか。

Java

1@Override 2protected boolean removeEldestEntry(Map.Entry<String, String> eldest) { 3 return size() > 16; 4}

API仕様
LinkedHashMap (Java SE 16 & JDK 16)

投稿2021/07/11 10:53

pg-tips

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問