JavaのLinkedHashMapクラスの使い方のサンプルです。
目次
仕組み | LinkedHashMapクラスとは / LinkedHashMapの特徴 |
LinkedHashMapとMapの関係 | |
取得 | 要素を取得(get、for文、forEach) |
要素を検索(containsKeyとcontainsValueの違い) | |
中身が空か、要素数を取得(isEmpty/size) | |
更新 | 要素を追加・更新(put/replace) / 要素を削除(remove/clear) |
LinkedHashMapクラスとは
Map<String,String> color = new LinkedHashMap<>(); color.put("a", "赤"); color.put("b", "青"); |
1つの変数で複数のキーと値を保持できます。
上記はLinkedHashMapクラスをインスタンス化してMapインターフェイス型の変数に代入しています。この変数colorは複数のキー(aとb)と値(赤と青)を持てるようになります。
また、追加した順序を保持します。
<>はジェネリクスです。変数colorの各値はStringとStringのみセット可能です。
LinkedHashMapの特徴
LinkedHashMapの変数のイメージ
要素
各項目を要素(element)といいます。
1つの変数で複数の「キー」と「値」を保持します。
キーは、任意の文字列を使用できます。
値は、StringやIntegerなどの参照型です。int等の基本型は使用できません。
キーの順序
マップに追加した順序を保持します。(←HashMap、TreeMapと違う点)
※追加した順またはアクセスした順を選択できます。デフォルトは追加した順です。コンストラクタの3つめの引数で切り替えます。
コンストラクタの3つめの引数
LinkedHashMap(int initialCapacity, // 1つめは初期容量 float loadFactor, // 2つめは負荷係数 boolean accessOrder(true/false)) // 3つめは順序付けモード |
順序付けモードをtrueにするとアクセス順、falseにすると挿入順です。
その他
キーは一意です。重複は許されません。
値の重複は可能です。
スレッドセーフではありません。
以下はOracleのJava8 API仕様のLinkedHashMapクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/LinkedHashMap.html
LinkedHashMapとMapの関係
public class LinkedHashMap<K,V> extends HashMap<K,V> // 継承するクラス implements Map<K,V> // 実装するインターフェース |
LinkedHashMapクラスはMapインターフェースを実装しています。
使用例
Map<String,String> color = new LinkedHashMap<>(); |
LinkedHashMapクラスをインスタンス化する時、LinkedHashMapクラス独自のメソッドを使用しない限り、Mapインターフェイス型の変数に代入することが多いです。
Mapインターフェイスにあるメソッドを使用できます。
以下はOracleのJava8 API仕様のMapインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Map.html
要素を取得(get、for文、forEach)
getはキーを指定して値を取得します。
for文とforEachはループで要素を順に取得します。
import java.util.LinkedHashMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
Map<String, String> color = new LinkedHashMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
// get (キーを指定して値を取得)
System.out.println(color.get("a")); // 赤
System.out.println(color.get("b")); // 黄
System.out.println(color.get("c")); // 青
// for文とentrySet (キーと値を取得)
for (Map.Entry<String, String> c1 : color.entrySet()) {
System.out.println(c1.getKey());// a b c
System.out.println(c1.getValue());// 赤 黄 青
}
// for文とkeySet (キーを取得)
for (String c1 : color.keySet()) {
System.out.println(c1);// a b c
}
// for文とvalues (値を取得)
for (String c1 : color.values()) {
System.out.println(c1);// 赤 黄 青
}
// forEach (変数a以降はラムダ式)
color.forEach((a, b) -> System.out.println(a + b));// a赤 b黄 c青
}
}
要素を検索(containsKeyとcontainsValueの違い)
public boolean containsKey(Object key) |
public boolean containsValue(Object value) |
containsKeyメソッドは、指定のキーが存在する場合はtrueを、存在しない場合はfalseを返します。 containsValueメソッドは、指定の値が存在する場合はtrueを、存在しない場合はfalseを返します。
Map<String,String> color = new LinkedHashMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
// containsKey
System.out.println(color.containsKey("b")); // true (存在する)
System.out.println(color.containsKey("z")); // false (存在しない)
// containsValue
System.out.println(color.containsValue("黄")); // true (存在する)
System.out.println(color.containsValue("白")); // false (存在しない)
中身が空か、要素数を取得(isEmpty/size)
public boolean isEmpty() |
public int size() |
isEmptyメソッドは、中身が空の場合はtrueを、そうでない場合はfalseを返します。
sizeメソッドは、要素数を返します。
Map<String,String> color = new LinkedHashMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
System.out.println(color.isEmpty());//false (中身あり)
System.out.println(color.size());//3 (要素数を表示)
color.clear();// すべての要素を削除
System.out.println(color.isEmpty());//true (中身なし)
System.out.println(color.size());//0 (要素数を表示)
要素を追加・更新(put/replace)
public V put(K key,V value) |
public V replace(K key, V value) |
putメソッドはキーが存在しない場合追加します。キーが存在する場合上書きします。
replaceメソッドはキーを指定して値を置き換えます。
Map<String,String> color = new LinkedHashMap<>();
// put (キーが存在しないので追加)
color.put("a", "赤");
color.put("b", "黄");
System.out.println(color);//{a=赤, b=黄}
// put (キーが存在するので更新)
color.put("b", "オレンジ");
System.out.println(color);//{a=赤, b=オレンジ}
// replace (キーを指定して置き換え)
color.replace("b", "シルバー");
System.out.println(color);//{a=赤, b=シルバー}
要素を削除(remove/clear)
public V remove(Object key) |
public void clear() |
removeメソッドは指定の位置の要素を削除します。
clearメソッドはすべての要素を削除します。
Map<String,String> color = new LinkedHashMap<>();
color.put("a", "赤");
color.put("b", "黄");
color.put("c", "青");
color.remove("a"); // 指定の要素を削除
System.out.println(color);//{b=黄, c=青}
color.clear(); // すべての要素を削除
System.out.println(color);//{}
関連の記事