マップ
マップは、一意のキーと値のペアで管理されるデータ構造です。言語によっては、ディクショナリ(辞書)、ハッシュ、連想配列と呼ぶ。
キーという意味ある情報できる点が、マップの特徴です。
先ずは書いてみましょう...
Main.java
package com.company;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
var map = new HashMap<String, String>(Map.of("Rose", "バラ",
"Sunflower", "ひまわり", "Morning Glory", "あさがお"));
// 指定のキーが含まれているかを検索
System.out.println(map.containsKey("Rose")); // 結果 : true
// 指定の値が含まれているかを検索
System.out.println(map.containsValue("バラ")); // 結果 : true
// マップの中身が空かを検索
System.out.println(map.isEmpty()); // 結果 : false
// すべてのキーを取得
for (var key : map.keySet()) {
System.out.println(key); // 結果 : Rose, Sunflower, Morning Glory
}
// すべての値を取得
for (var value : map.values()) {
System.out.println(value); // 結果 : バラ、ひまわり、あさがお
}
// 指定のキーの値をvalueに置き換え
map.replace("Rose", "薔薇");
// 指定のキーkey/値oldがある場合、その値をnewに置き換え
map.replace("Sunflower", "ひまわり", "向日葵");
for (var entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
// // 結果 : Rose:薔薇、 Sunflower:向日葵、 Morning Glory:あさがお
}
}
}
実行結果
true
true
false
Rose
Sunflower
Morning Glory
バラ
ひまわり
あさがお
Rose:薔薇
Sunflower:向日葵
Morning Glory:あさがお
マップはそのまま拡張for命令に渡すことはできない点に注意してください。キー/値を列挙するには、keySet/valuesメソッドでキー/値のセットを取り出す必要があります。
もしくは、entrySet/メソッドで、マップエントリー(Map.Entry)のセットを取得してもかまいません。
その場合は、エントリーからさらにgetKey/getValueメソッド経由でキー/値にアクセスできます。
値を追加して、ログで取得するサンプル
Main.java
package com.company;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
var key1 = Integer.valueOf(1);
var key2 = Integer.valueOf(2);
var key3 = Integer.valueOf(3);
var key4 = Integer.valueOf(4);
var data = new HashMap<Integer, String>() {
{
// pub(K key, V value) 指定のキー/値の要素を追加
put(key1, "Apple");
put(key2, "Google");
put(key3, "FaceBook");
put(key4, "Amazon");
}
};
System.out.println(data.get(key1)); // 指定のキーの値を取得
System.out.println(data.getOrDefault(key2, "Google")); // 指定のキーの値を取得
System.out.println(data.entrySet()); // すべて要素を取得
System.out.println(data.keySet()); // すべてのキーを取得
System.out.println(data.size()); // マップの要素数を取得
System.out.println(data.values()); // すべての値を取得
}
}
実行結果
Apple
Google
[1=Apple, 2=Google, 3=FaceBook, 4=Amazon]
[1, 2, 3, 4]
4
[Apple, Google, FaceBook, Amazon]