Java LinkedHashMapの使い方のサンプル

JavaのLinkedHashMapクラスの使い方のサンプルです。

目次

仕組み LinkedHashMapクラスとは
  LinkedHashMapクラスとMapインターフェースの関係
取得する 要素を取得(get、for文、forEach)
  要素を検索(containsKeyとcontainsValueの違い)
  中身が空か、要素数を取得(isEmpty/size)
追加・更新 要素を追加・更新(put/replace)
削除 要素を削除(remove/clear)

LinkedHashMapクラスとは

LinkedHashMapクラスの定義

public class LinkedHashMap<K,V>
extends HashMap<K,V> // 継承するクラス
implements Map<K,V> // 実装するインターフェース

使用例

Map<String,String> a = new LinkedHashMap<>();

上記はLinkedHashMapクラスをインスタンス化してMapインターフェイス型の変数に代入しています。この変数aは複数のキーと値を持てるようになります。
<>はジェネリクスです。変数の中身はStringとStringであると宣言しています。

LinkedHashMapの仕様

項目 説明
LinkedHashMapの変数のイメージ
LinkedHashMap 1つの変数で複数の「キー」と「値」を保持します。
キーは、任意の文字列を使用できます。
値は、StringやIntegerなどの参照型です。int等の基本型は使用できません。
各項目を要素(element)といいます。
キーの順序 マップに追加した順序を保持します。(←HashMap、TreeMapと違う点)
※追加した順またはアクセスした順を選択できます。デフォルトは追加した順です。コンストラクタの3つめの引数で切り替えます。
コンストラクタの3つめの引数 LinkedHashMap(int initialCapacity, // 1つめ:初期容量
float loadFactor, // 2つめ:負荷係数
boolean accessOrder) // 3つめ:順序付けモード
順序付けモードをtrueにするとアクセス順で、falseにすると挿入順です。
キーの重複 キーは一意です。重複は許されません。
値の重複は可能です。
スレッドセーフ スレッドセーフではありません。
導入時期 バージョン1.4で導入されました。

以下は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)

public V get(Object key)

getメソッドは、要素のキーを指定して値を取得します。
entrySetメソッドはキーと値を取得します。
keySetメソッドはキーを取得します。
valuesメソッドは値を取得します。

package test1;
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", "青");
		
		System.out.println(color.get("b")); //黄
		
		for (Map.Entry<String, String> c1 : color.entrySet()) {
			System.out.println(c1.getKey());// a b c
			System.out.println(c1.getValue());// 赤 黄 青
		}
		for (String c1 : color.keySet()) {
			System.out.println(c1);// a b c
		}
		for (String c1 : color.values()) {
			System.out.println(c1);// 赤 黄 青
		}
		color.forEach((a,b) -> System.out.println(a+b));//a赤 b黄 c青
	}
 }

14行目は、entrySetメソッドでキーと値をすべて取得しています。
18行目は、keySetメソッドでキーを取得しています。
21行目は、valuesメソッドで値を取得しています。
24行目は、forEachメソッドでマップの各値を取得しています。変数a以降はラムダ式です。
forEachメソッドは、Java8で導入されました。

要素を検索(containsKeyとcontainsValueの違い)

public boolean containsKey(Object key)
public boolean containsValue(Object value)
package test1;
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", "青");
		
		System.out.println(color.containsKey("b")); // true
		System.out.println(color.containsKey("z")); // false
		System.out.println(color.containsValue("黄")); // true
		System.out.println(color.containsValue("白")); // false
	}
 }

12行目は、containsKeyメソッドで指定のキーがあるか真偽値を取得しています。
14行目は、containsValueメソッドで指定の値があるか真偽値を取得しています。

中身が空か、要素数を取得(isEmpty/size)

public boolean isEmpty()
public int size()

isEmptyメソッドは、中身が空の場合はtrueを、そうでない場合はfalseを返します。
sizeメソッドは、要素数を返します。

package test1;
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", "青");

		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
    }
 }

12行目は、isEmptyメソッドで空か真偽値を取得しています。中身があるのでfalseです。
13行目は、sizeメソッドで要素数を表示しています。
14行目は、clearメソッドですべての要素を削除しています。
15行目は、中身が空なのでtrueです。

要素を追加・更新(put/replace)

public V put(K key,V value)
public V replace(K key, V value)

putメソッドは要素を追加します。
replaceメソッドはキーを指定して値を置き換えます。

package test1;
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", "黄");
        System.out.println(color);//{a=赤, b=黄}
        color.put("b", "オレンジ");
        System.out.println(color);//{a=赤, b=オレンジ}
        color.replace("b", "シルバー");
        System.out.println(color);//{a=赤, b=シルバー}
    }
 }

9,10行目は、putメソッドで要素を追加しています。
12行目は、既にあるキーを指定しています。上書きされます。
14行目は、replaceメソッドでキーを指定して値を更新しています。

要素を削除(remove/clear)

public V remove(Object key)
public void clear()

removeメソッドは指定の位置の要素を削除します。
clearメソッドはすべての要素を削除します。

package test1;
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", "青");

		color.remove("a");
		System.out.println(color);//{b=黄, c=青}
		color.clear();
		System.out.println(color);//{}
	}
 }

12行目は、removeメソッドで指定の要素を削除しています。
14行目は、clearメソッドですべての要素を削除しています。

関連の記事

Java HashMapとMapの使い方のサンプル
Java TreeMapの使い方のサンプル

△上に戻る