LoginSignup
1
1

More than 1 year has passed since last update.

Javaのマップとは?

Posted at

マップ

マップは、一意のキーと値のペアで管理されるデータ構造です。言語によっては、ディクショナリ(辞書)、ハッシュ、連想配列と呼ぶ。
キーという意味ある情報できる点が、マップの特徴です。

先ずは書いてみましょう...

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]
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1