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メソッドで再度追加する方法でも順序の変更は可能です。しかし、要素がどのような順序で格納されているか分かりづらくなるため、この例のように、インスタンスを再生成し、全ての要素を追加し直す方が個人的には良いと思います。
コメント