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

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

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

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

キャッシュ

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

Q&A

0回答

382閲覧

Java LRUの実装

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

キャッシュ

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

0グッド

0クリップ

投稿2021/06/29 08:33

編集2021/06/30 03:02

LRUキャッシュを実装する。

以下に⽰す、⽂字列のKey、Valueのペアを格納するLRUキャッシュ(Mapの⼀種)を実装する。

public class LruCache {
public LruCache(int size) {}
public void put(String key, String value) {}
public String get(String key)
}

LruCacheクラスについてデータが「使われる」とはgetを実⾏されることとし、
「もっとも使われていない」とは、getを実⾏された時間がもっとも古いものとする。

使⽤例
int size = 2;
var lru = new LruCache(size);
// ⼀つも使われてない場合は最初に追加したものから消える
lru.put(“a”, “dataA”);
lru.put(“b”, “dataB”);
lru.put(“c”, “dataC”);
String v1 = lru.get(“a”); // v1はnull
// get されたら使われたとみなす
lru.put(“a”, “dataA”);
lru.put(“b”, “dataB”);
String v2 = lru.get(“a”); // v2は“dataA”
lru.put(“c”, “dataC”);
String v3 = lru.get(“b”); // v3はnull

追加課題 キャッシュサイズ変更機能の追加
実装したLRUキャッシュについて、 キャッシュ使⽤中にキャッシュサイズ変更をする機能を追加せよ。
キャッシュサイズの変更は、増減いずれも可能とする。 サイズ変更実⾏後、サイズ増減いずれの場合も正しい動作が維持されること。

日本語の問題になるかもしれませんが、上記の実装とは{}の中を記述するという意味であってますでしょうか?また、下記のコードの何が間違っているのでしょうか?

Java

1package ANS; 2 3import java.util.LinkedHashMap; 4import java.util.Map; 5 6public class LruCache extends LinkedHashMap { 7 int limit; 8 public LruCache(int size) { 9 super(); 10 limit = size; 11 } 12 public LruCache(int i, float f, boolean b) { super(i, f, b); } 13 14 protected boolean removeEldestEntry(Map.Entry eldest) { 15 return size() > limit; 16 } 17 18 public static void main(String[] args) { 19 test(new LruCache(16, 0.75f, true)); 20 } 21 static void test(Map map) { 22 for (int i = 0; i < limit; i++) { 23 map.put(i, i); 24 } 25 System.out.println(map); 26 map.get(3); 27 map.get(2); 28 System.out.println(map); 29 map.put("a","dataA"); 30 map.put("b","dataB"); 31 map.put("c","dataC"); 32 System.out.println(map); 33 map.get(1); 34 map.get(2); 35 map.get(3); 36 map.get(4); 37 System.out.println(map); 38 } 39} 40

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問