LoginSignup
8
7

More than 3 years have passed since last update.

【Java】HashMapクラスの使い方

Last updated at Posted at 2020-12-15

Map とは

Mapとは、java.util.Map というインターフェイスで、Java でキーと値をセットにして扱いたい時に使うデータ構造です。
Mapインターフェースを用いることで、HashMapLinkedHashMapといったデータ構造を統一的に取り扱えます。
本記事では HashMap クラスの使い方について書きます。

Map インターフェースの使い方

Map インターフェースを実装するクラスを自作するか、HashMapLinkedHashMapのような実装クラスを用います。
Map には同一のキーを複数登録出来ず、各キーは 1 つの値にしかマッピングできません。

HashMap クラスの特徴

キーの順序は保証されない
キーの重複は許容されていない
値の重複は可能

宣言方法

HashMapクラスの宣言は以下のように記述します。
型推論により右辺のデータ型は省略出来ます
値には List、Set、Mapを持たせることができ、キーにはクラスを指定することも可能です。

Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();
Map<String, List> map = new HashMap<>();  // 値にListを指定
Map<String, Set> map = new HashMap<>();   // 値にSetを指定
Map<String, Map<Integer, Object>> map = new HashMap<>();  // 値にMapを指定
Map<Example>, List> map = new HashMap<>();  // キーにExampleというクラスを指定

使い方

キーを指定して値を追加する(put メソッド)

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");
    }
 }

既にキーがマッピングされている場合には上書きされ、マッピングが無い場合には”null”を返します。

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("dog", "猫");
        System.out.println(animal.get("dog")); //猫
        System.out.println(animal.get("pig")); //null
    }
 }

キーを指定して値を取得する(get メソッド)

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");
        System.out.println(animal.get("cat")); //猫
    }
 }

キーと値をすべて取得する(keySet メソッド)

keySetメソッドを使用すると、Mapのキーを全て取得することが出来ます。
keySetメソッドは MapのキーをSet型で返すので、拡張for文を使って以下のように繰り返すことで全てのキーを取得できます。

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");

        for (String pet : animal.keySet()) {
            System.out.println(pet);// monkey dog cat
        }
    }
 }

値をすべて取得する(values メソッド)

valuesメソッドを使用すると、Mapの値を全て取得することが出来ます。
valuesメソッドもMapのキーをSet型で返すので、拡張for文を使えばkeySetメソッドのように全ての値を取得できます。

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");

        for (String pet : animal.values()) {
            System.out.println(pet);// 猿 犬 猫
        }
    }
 }

要素数を取得する(size メソッド)

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");

        System.out.println(animal.size()); // 3
    }
 }

指定のキーがあるか真偽値を返す(containsKeyメソッド)

Map の中に特定のキーが含まれているかどうかは、containsKey メソッドを使って判断します。

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");
        if (animal.containsKey("dog")) { // true
            System.out.println("犬が含まれています"); // 犬が含まれています
        }
    }
 }

指定の値があるか真偽値を返す(containsValue メソッド)

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");
        if (animal.containsValue("猿")) { // true
            System.out.println("monkeyが含まれています"); // monkeyが含まれています
        }
    }
 }

中身が空か真偽値を返す(isEmpty メソッド)

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");
        animal.clear();
        if (animal.isEmpty()) { // true
            System.out.println("空です"); // 空です
        }
    }
 }

要素を順番に処理する(forEach メソッド)

public class Sample {
    public static void main(String[] args) {
        Map<String,String> animal = new HashMap<>();
        animal.put("monkey", "猿");
        animal.put("dog", "犬");
        animal.put("cat", "猫");
        animal.forEach((key,value) -> System.out.println(key + " " + value)));
        //monkey 猿 
        //dog 犬
        //cat 猫
    }
 }

参照

Java Platform SE 8 インタフェースMap

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