カテゴリ: Java 更新日: 2026/01/14

JavaのLinkedHashMapを徹底解説!初心者でもわかる順序付きマップの基本と応用

LinkedHashMap クラス
LinkedHashMap クラス

先生と生徒の会話形式で理解しよう

生徒

「Javaでデータをキーと値で管理したいんですが、データの順序も保持できる方法はありますか?」

先生

「いい質問ですね!JavaのLinkedHashMapクラスを使うと、キーと値のペアを管理しつつ、挿入順序を保持できますよ。」

生徒

「挿入順序を保持するってどういうことですか?」

先生

「データを追加した順序で取得できるということです。では、基本的な使い方から見ていきましょう!」

1. LinkedHashMapとは

1. LinkedHashMapとは
1. LinkedHashMapとは

LinkedHashMapは、Javaのコレクションフレームワークに含まれる「順序付きのマップ型」で、キーと値のペアを管理するためのクラスです。ふつうのHashMapと同じように「キーから値を素早く取り出す」ことができますが、追加したときの順番(挿入順序)をそのまま覚えておいてくれるという大きな特徴があります。

たとえば、データを「キー1」「キー2」「キー3」の順に登録した場合、あとからfor文で取り出すときも「キー1」「キー2」「キー3」の順で取り出されます。順番を意識しないでよい場面ならHashMapでも問題ありませんが、「画面に表示する順番を固定したい」「履歴を古い順にたどりたい」といったときには、LinkedHashMapのほうが扱いやすくなります。

イメージしやすいように、ごく簡単なサンプルコードも見てみましょう。ここでは、登録した順番どおりに出力されることだけを確認します。


import java.util.LinkedHashMap;

public class SimpleLinkedHashMap {
    public static void main(String[] args) {
        LinkedHashMap<String, String> map = new LinkedHashMap<>();
        map.put("key1", "一番目");
        map.put("key2", "二番目");
        map.put("key3", "三番目");

        System.out.println(map); // {key1=一番目, key2=二番目, key3=三番目}
    }
}

このように、LinkedHashMapは「マップとしての使いやすさ」と「順序を保ったまま扱える」という二つの性質をあわせ持った便利なクラスです。Javaで順序付きのマップを使いたいときには、まずLinkedHashMapを思い出すようにしておくと、コレクション選びに迷いにくくなります。

2. LinkedHashMapの基本的な使い方

2. LinkedHashMapの基本的な使い方
2. LinkedHashMapの基本的な使い方

ここでは、LinkedHashMapのいちばん基本的な使い方を見ていきます。とくに初めて触れるときは「作る」「値を入れる(put)」「取り出す(get)」「順番どおりにループする」の四つを押さえておくと理解しやすくなります。まずは、キーと値をいくつか登録して、その中身を画面に表示するシンプルなサンプルから見てみましょう。


import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapExample {
    public static void main(String[] args) {
        // LinkedHashMapの作成(キーが文字列、値が整数)
        LinkedHashMap<String, Integer> map = new LinkedHashMap<>();

        // データの追加(putメソッドで登録)
        map.put("Apple", 100);
        map.put("Banana", 80);
        map.put("Cherry", 120);

        // データの出力(entrySetでキーと値のセットを順番どおりに取り出す)
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // 特定のキーだけ取り出したいときは get を使う
        Integer applePrice = map.get("Apple");
        System.out.println("Apple の価格だけ知りたいとき: " + applePrice);
    }
}

この例では、「Apple」「Banana」「Cherry」の順にデータを追加しています。for文でentrySet()を回すと、追加した順番のまま「Apple → Banana → Cherry」という順序でキーと値のペアが取り出されることが分かります。ここが通常のHashMapとの大きな違いです。

また、map.get("Apple")のように、知りたいキーを指定すれば、そのキーに対応する値だけを取り出すこともできます。LinkedHashMapは「順番を覚えてくれるマップ」ではありますが、ふつうのマップと同じようにキーから値を素早く検索できるので、順序付きのデータ管理をしたいときにとても便利な選択肢になります。

実行結果:


Apple: 100
Banana: 80
Cherry: 120
Apple の価格だけ知りたいとき: 100

3. LinkedHashMapの主な用途

3. LinkedHashMapの主な用途
3. LinkedHashMapの主な用途

LinkedHashMapは、以下のような用途で特に役立ちます。

  • ユーザーの操作履歴やアクセス履歴の管理。
  • 順序を保持したままデータを処理したい場合。
  • キャッシュ機能の実装。例えば、最近使ったデータを優先的に保持する仕組みを作成できます。

4. LinkedHashMapでキャッシュを実装する方法

4. LinkedHashMapでキャッシュを実装する方法
4. LinkedHashMapでキャッシュを実装する方法

LinkedHashMapを使うと、簡単にキャッシュ機能を実装できます。以下は、最も古いデータを自動的に削除するキャッシュの例です。


import java.util.LinkedHashMap;
import java.util.Map;

public class CacheExample {
    public static void main(String[] args) {
        // 最大3つのエントリを保持するキャッシュ
        LinkedHashMap<Integer, String> cache = new LinkedHashMap<>(3, 0.75f, true) {
            @Override
            protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest) {
                return size() > 3; // サイズが3を超えたら最も古いエントリを削除
            }
        };

        // データの追加
        cache.put(1, "A");
        cache.put(2, "B");
        cache.put(3, "C");

        // キャッシュにアクセス
        cache.get(1);
        cache.put(4, "D"); // 古いエントリが削除される

        // キャッシュの内容を出力
        System.out.println(cache);
    }
}

実行結果:


{2=B, 3=C, 4=D}

このプログラムでは、最大サイズを3に設定しており、新しいデータを追加すると最も古いデータが削除されます。

5. LinkedHashMapの注意点

5. LinkedHashMapの注意点
5. LinkedHashMapの注意点

LinkedHashMapを使用する際には、以下の点に注意してください。

  • 順序を保持するため、通常のHashMapに比べて少し処理速度が遅くなる場合があります。
  • 大量のデータを管理する場合、パフォーマンスの影響を検討する必要があります。
  • スレッドセーフではないため、複数スレッドからアクセスする場合はCollections.synchronizedMapConcurrentHashMapを検討してください。

6. まとめ

6. まとめ
6. まとめ

本記事では、JavaのLinkedHashMapクラスについて、基本的な特徴や使い方、さらにキャッシュ機能の実装方法までを解説しました。LinkedHashMapは、HashMapのようにキーと値でデータを管理しながら、挿入順序を保持する特性を持つコレクションです。特に順序が重要なデータ管理や、キャッシュ機能を作成したい場合に非常に役立ちます。

また、LinkedHashMapはデフォルトで挿入順序を保持しますが、アクセス順序を設定することも可能です。この特性を活かすことで、最近アクセスされたデータを優先的に管理するLRU(Least Recently Used)キャッシュを簡単に実装できます。

以下に、この記事で解説した内容を基にした簡単なサンプルプログラムを示します。このプログラムでは、LinkedHashMapを利用してデータを順序通りに管理し、挿入順序が保持されることを確認します。


import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapSummary {
    public static void main(String[] args) {
        // LinkedHashMapの作成
        LinkedHashMap<String, String> users = new LinkedHashMap<>();

        // データの追加
        users.put("101", "田中太郎");
        users.put("102", "佐藤花子");
        users.put("103", "鈴木一郎");

        // データの出力
        System.out.println("挿入順序が保持されるLinkedHashMapの内容:");
        for (Map.Entry<String, String> entry : users.entrySet()) {
            System.out.println("ユーザーID: " + entry.getKey() + ", 名前: " + entry.getValue());
        }
    }
}

実行結果:


挿入順序が保持されるLinkedHashMapの内容:
ユーザーID: 101, 名前: 田中太郎
ユーザーID: 102, 名前: 佐藤花子
ユーザーID: 103, 名前: 鈴木一郎

この例では、ユーザーIDと名前のペアをLinkedHashMapで管理し、挿入順序が保持されることを確認しています。LinkedHashMapは順序を意識したデータ管理に最適です。

先生と生徒の振り返り会話

生徒

「LinkedHashMapについてよくわかりました!データの順序が保持されるのは便利ですね。」

先生

「そうですね。挿入順序が重要なデータ管理や、キャッシュのような特定の用途で特に力を発揮します。」

生徒

「アクセス順序を使ったキャッシュの実装も面白そうでした。これなら最近使ったデータを効率よく管理できますね。」

先生

「その通りです。LinkedHashMapはカスタマイズも簡単なので、ぜひプロジェクトで試してみてください。」

生徒

「はい!今回は順序が保持される点がよく理解できました。HashMapとの違いもしっかり意識して使ってみます!」

先生

「その意気です。わからない点があればまた聞いてくださいね。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

LinkedHashMapとHashMapの違いは何ですか?

LinkedHashMapはデータの挿入順序を保持しますが、HashMapは順序を保証しません。順序を保持したい場合にはLinkedHashMapを選ぶと良いでしょう。

LinkedHashMapでアクセス順序を保持するにはどうすれば良いですか?

LinkedHashMapのコンストラクタにtrueを渡して初期化することで、アクセス順序を保持する設定にできます。

LinkedHashMapはスレッドセーフですか?

LinkedHashMapはスレッドセーフではありません。スレッドセーフにするには、Collections.synchronizedMapConcurrentHashMapを利用してください。

LinkedHashMapの最大容量を設定することはできますか?

LinkedHashMap自体に容量制限はありませんが、removeEldestEntryメソッドをオーバーライドすることで、キャッシュのように最大サイズを制限することが可能です。

LinkedHashMapはnullキーやnull値をサポートしていますか?

はい、LinkedHashMapはnullキーを1つ、null値を複数サポートしています。

キャッシュの実装にLinkedHashMapを使う利点は何ですか?

LinkedHashMapは挿入順序やアクセス順序を保持するため、最近使用されたデータを優先的に管理できるLRUキャッシュの実装に適しています。

LinkedHashMapの初期容量と負荷係数はどう設定しますか?

LinkedHashMapのコンストラクタで初期容量と負荷係数を指定できます。例えば、new LinkedHashMap<>(16, 0.75f)のように設定します。

LinkedHashMapのパフォーマンスに影響する要因は何ですか?

順序を保持するため、通常のHashMapより若干処理速度が遅くなります。また、大量のデータを管理する場合はメモリ使用量も増加します。

LinkedHashMapの内容をすべて削除するにはどうすれば良いですか?

clear()メソッドを呼び出すことで、すべてのエントリを削除できます。

LinkedHashMapで特定の値を持つエントリを検索できますか?

containsValue()メソッドを使用して特定の値が存在するかどうかを確認できます。

Javaの基礎を最初から体系的に学びたい人には、 初心者向けで定評のある定番入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Java
JavaのInterruptedExceptionを完全ガイド!初心者でも理解できるスレッド制御と例外処理
新規投稿
New2
Thymeleaf
Thymeleafのth:hrefの使い方を全解説。初心者でも完璧に理解できるガイド
更新記事
New3
Spring
Springの@annotationアノテーションの使い方を完全ガイド!初心者でもわかるAOPの活用法
更新記事
New4
Spring
Javaの@withinアノテーションを初心者向けに解説!Spring AOPでの使い方を完全ガイド
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.5
Java&Spring記事人気No5
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク