Java LinkedHashMapクラスの使い方

Java logo Java

Mapインタフェースの実装クラス、かつHashMapクラスのサブクラスであるLinkedHashMapクラスの使い方について解説します。

LinkedHashMapクラスの特徴

LinkedHashMapクラスは、HashMapクラスのサブクラスであるため、データをキーとバリューのセットで管理できる点や、基本的なメソッド(put, get, replace, removeなど)の使い方は、HashMapクラスと同じです。HashMapクラスと異なるのは、要素の順序(キーの追加順)を保証する点です。

各種メソッドの使い方

LinkedHashMapクラスの基本的なメソッド(put, get, replace, removeなど)の使い方は、HashMapクラスと同じです。

HashMapクラスの使い方についての記事はこちら

LinkedHashMapクラスとHashMapクラスを比較

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

public class Main {
    public static void main(String[] args) {
        Map<String, Object> lhm = new LinkedHashMap<>();
        lhm.put("name", "taro");
        lhm.put("age", 6);
        lhm.put("sex", "male");
        lhm.put("height", 115);
        lhm.put("weight", 20);

        Map<String, Object> hm = new HashMap<>();
        hm.put("name", "taro");
        hm.put("age", 6);
        hm.put("sex", "male");
        hm.put("height", 115);
        hm.put("weight", 20);

        System.out.println("LinkedHashMap: " + lhm);
        System.out.println("HashMap: " + hm);
    }
}

■出力結果
LinkedHashMap: {name=taro, age=6, sex=male, height=115, weight=20}
HashMap: {sex=male, name=taro, weight=20, age=6, height=115}

出力結果より、LinkedHashMapクラスのデータは要素の追加順になっていることが分かります。反対に、HashMapクラスのデータは順序が保証されていないことも確認できます。

要素の順序の変更方法

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

public class Main {
    public static void main(String[] args) {
        Map<String, Object> lhm = new LinkedHashMap<>();
        lhm.put("name", "taro");
        lhm.put("age", 6);
        lhm.put("sex", "male");
        System.out.println("before: " + lhm);

        lhm = new LinkedHashMap<>();
        lhm.put("name", "taro");
        lhm.put("sex", "male");
        lhm.put("age", 6);
        System.out.println("after: " + lhm);
    }
}

■出力結果
before: {name=taro, age=6, sex=male}
after: {name=taro, sex=male, age=6}

■補足情報
後ろに移動させたい要素をremoveメソッドで削除し、putメソッドで再度追加する方法でも順序の変更は可能です。しかし、要素がどのような順序で格納されているか分かりづらくなるため、この例のように、インスタンスを再生成し、全ての要素を追加し直す方が個人的には良いと思います。

コメント

タイトルとURLをコピーしました