Java - HashMap 순회, 3가지 방법

HashMap은 key-value 쌍으로 요소를 갖고 있는 자료구조입니다. 이 글에서는 HashMap의 요소들을 순회하는 방법을 소개합니다.

1. for 문으로 HashMap 순회

for 반복문을 이용하여 HashMap의 요소들을 순회할 수 있습니다.

1.1 HashMap.entrySet() 순회

HashMap.entrySet()는 Map이 갖고 있는 요소 정보들을 Set<Map.Entry<K,V>> 형태로 리턴합니다. Map.Entry는 key-value 쌍의 데이터를 갖고 있는데, 이 Set를 순회하면 Map의 모든 요소에 접근할 수 있습니다.

Map.Entry는 아래 두개 메소드를 제공합니다.

  • 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의 모든 key 값들을 갖고 있는 Set<K>를 리턴
  • HashMap.values()는 HashMap의 모든 value 값들만 갖고 있는 Collection<V>을 리턴

둘다 콜렉션이기 때문에 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 Entry의 Iterator

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 Key, Value의 Iterator

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
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha