Java - HashMap巡回、3つの方法

HashMapは、キーと値のペアで要素を持つデータ構造です。この記事では、HashMapの要素を巡回する方法を紹介します。

1. for 文で HashMap 巡回

for イテレーションステートメントを使用して HashMap の要素を巡回できます。

1.1 HashMap.entrySet() 巡回

HashMap.entrySet() は Map が持つ要素情報を Set<Map.Entry<K,V>>の形で返します。 Map.Entryはキーと値のペアのデータを持っていますが、このSetを巡回するとMapのすべての要素にアクセスできます。

Map.Entryは以下の2つのメソッドを提供します。

  • Entry.getKey() : key-value ペアの要素から key 値を返す
  • Entry.getValue() : key-value ペアの要素から value 値を返す

以下の例は、forステートメントでHashMapのすべての EntrySetを巡回しながらkeyとvalueを出力する例です。

import java.util.HashMap;
import java.util.Map;

public class Example {

    public static void main(String[] args) {

        Map<String, Integer> myMap = new HashMap<>();
        myMap.put("apple", 1);
        myMap.put("orange", 2);
        myMap.put("kiwi", 3);

        for (Map.Entry<String, Integer> entry : myMap.entrySet()) {
            System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
        }
    }
}

Output:

key: orange, value: 2
key: apple, value: 1
key: kiwi, value: 3

1.2 HashMap.keySet()、HashMap.values() について

  • HashMap.keySet() は HashMap のすべてのキー値を持つ `Setリー
  • HashMap.values() は HashMap のすべての value 値のみを持つ `Collectionリー

どちらもコレクションなので、for文で巡回できます。

以下の例は、 keySet()values() の Collection を巡回しながら key と value を出力する例です。

import java.util.HashMap;
import java.util.Map;

public class Example2 {

    public static void main(String[] args) {

        Map<String, Integer> myMap = new HashMap<>();
        myMap.put("apple", 1);
        myMap.put("orange", 2);
        myMap.put("kiwi", 3);

        for (String key : myMap.keySet()) {
            System.out.println("key: " + key + ", value: " + myMap.get(key));
        }

        for (Integer value : myMap.values()) {
            System.out.println("value: " + value);
        }
    }
}

Output:

key: orange, value: 2
key: apple, value: 1
key: kiwi, value: 3
value: 2
value: 1
value: 3

2. forEachによるHashMapの巡回

  • HashMap.forEach()はMapの要素を巡回し、keyとvalueに簡単にアクセスできます。以下の例のように、Lambdaを引数として渡して処理できます。
  • HashMap.entrySet().forEach() は Entry を巡回します。 Entryを介してkeyとvalueにアクセスできます
import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class Example1 {

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        Map<String, Integer> myMap = new HashMap<>();
        myMap.put("apple", 1);
        myMap.put("orange", 2);
        myMap.put("kiwi", 3);

        myMap.forEach((k, v) -> {
            System.out.println("key: " + k + ", value: " + v);
        });

        myMap.entrySet().forEach((entry) -> {
            System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
        });
    }
}

Output:

key: orange, value: 2
key: apple, value: 1
key: kiwi, value: 3
key: orange, value: 2
key: apple, value: 1
key: kiwi, value: 3

3. Iterator で HashMap 巡回

3.1 エントリのイテレータ

HashMap.entrySet().iterator() は HashMap の Entry の Iterator を返します。反復文とIteratorを使用してEntry要素を巡回し、Entryを介してkeyとvalueにアクセスできます。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Example3 {

    public static void main(String[] args) {

        Map<String, Integer> myMap = new HashMap<>();
        myMap.put("apple", 1);
        myMap.put("orange", 2);
        myMap.put("kiwi", 3);

        Iterator<Map.Entry<String, Integer>> entry =
                myMap.entrySet().iterator();
        while (entry.hasNext()) {
            Map.Entry<String, Integer> element = entry.next();
            System.out.println("key: " +  element.getKey() + ", value: " + element.getValue());
        }
    }
}

Output:

key: orange, value: 2
key: apple, value: 1
key: kiwi, value: 3

3.2 キー、値イテレータ

HashMap.keySet().iterator(), HashMap.values().iterator() は key と value の Iterator を返します。

以下のようにIteratorを巡回しながら、keyとvalueにアクセスできます。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Example4 {

    public static void main(String[] args) {

        Map<String, Integer> myMap = new HashMap<>();
        myMap.put("apple", 1);
        myMap.put("orange", 2);
        myMap.put("kiwi", 3);

        Iterator<String> it = myMap.keySet().iterator();
        while (it.hasNext()) {
            String key = it.next();
            System.out.println("key: " +  key);
        }

        Iterator<Integer> it2 = myMap.values().iterator();
        while (it2.hasNext()) {
            Integer value = it2.next();
            System.out.println("value: " +  value);
        }
    }
}

Output:

key: orange
key: apple
key: kiwi
value: 2
value: 1
value: 3

Related Posts

codechachaCopyright ©2019 codechacha