Java/컬렉션

[Java]HashMap 순회하는 방법

DevStory 2022. 6. 27.

이번 포스팅은 Java에서 HashMap을 순회하는 방법을 소개합니다.


방법 1. 반복자(Iterator) 및 entrySet() 메서드

Map 인터페이스는 Collection 인터페이스를 상속하지 않았으므로 반복자(Iterator)가 존재하지 않습니다.

 

entrySet() 메서드는 Collection 인터페이스를 상속하는 Set 인터페이스를 반환합니다. 반환된 Set 인터페이스에서 iterator() 메서드를 사용하면 반복자를 사용할 수 있습니다.

 

다음 예제는 반복자를 사용하여 키-값 쌍을 콘솔에 출력합니다.

public class Main {
  public static void main(String args[]) {
    HashMap<String, String> hm = new HashMap<String, String>();

    hm.put("A", "One");
    hm.put("B", "Two");
    hm.put("C", "Three");

    Iterator<Map.Entry<String, String>> entry =
            hm.entrySet().iterator();

    while (entry.hasNext()) {
        Map.Entry<String, String> element = entry.next();

        System.out.println("KEY: " +  element.getKey() +
                " / VALUE: " + element.getValue());
    }
  }
}

실행 결과

KEY: A / VALUE: One
KEY: B / VALUE: Two
KEY: C / VALUE: Three

방법 2. 반복자(Iterator) 및 keySet() 메서드

HashMap의 keySet() 메서드는 키를 Set으로 반환합니다. Set 인터페이스에는 반복자가 존재하므로 키를 순회할 수 있습니다.

 

다음 예제는 반복자와 keySet() 메서드를 사용하여 키-값 쌍을 콘솔에 출력합니다.

public class Main {
  public static void main(String args[]) {
    HashMap<String, String> hm = new HashMap<String, String>();

    hm.put("A", "One");
    hm.put("B", "Two");
    hm.put("C", "Three");

    Iterator keySetIterator = hm.keySet().iterator();

    while (keySetIterator.hasNext()) {
      String key = keySetIterator.next().toString();

      System.out.println("KEY: " +  key +
              " / VALUE: " + hm.get(key));
    }
  }
}

실행 결과

KEY: A / VALUE: One
KEY: B / VALUE: Two
KEY: C / VALUE: Three

방법 3. 향상된 for문 및 entrySet() 메서드

반복자를 직접 생성하지 않고 향상된 for문 내부적으로 iterator() 메서드를 호출할 수 있습니다.

 

다음 예제는 향상된 for문과 entrySet() 메서드를 사용하여 키-값 쌍을 콘솔에 출력합니다.

public class Main {
  public static void main(String args[]) {
    HashMap<String, String> hm = new HashMap<String, String>();

    hm.put("A", "One");
    hm.put("B", "Two");
    hm.put("C", "Three");

    Iterator<Map.Entry<String, String>> entry =
            hm.entrySet().iterator();

    Set<Map.Entry<String, String>> entrySet = hm.entrySet();

    for (Map.Entry<String, String> element : entrySet) {
      System.out.println("KEY: " +  element.getKey() +
              " / VALUE: " + element.getValue());
    }
  }
}

실행 결과

KEY: A / VALUE: One
KEY: B / VALUE: Two
KEY: C / VALUE: Three

방법 4. 향상된 for문 및 keySet() 메서드

다음 예제는 향상된 for문과 keySet() 메서드를 사용하여 키-값 쌍을 콘솔에 출력합니다.

public class Main {
  public static void main(String args[]) {
    HashMap<String, String> hm = new HashMap<String, String>();

    hm.put("A", "One");
    hm.put("B", "Two");
    hm.put("C", "Three");

    Set<String> keySet = hm.keySet();

    for (String key : keySet) {
      System.out.println("KEY: " +  key + 
              " / VALUE: " + hm.get(key));
    }
  }
}

실행 결과

KEY: A / VALUE: One
KEY: B / VALUE: Two
KEY: C / VALUE: Three

방법 5. forEach()문 및 람다식

HashMap의 forEach() 메서드는 BiConsumer 기능적 인터페이스를 인수로 사용하는 람다식을 사용할 수 있습니다.

 

다음 예제는 forEach()문과 람다식을 사용하여 키-값 쌍을 콘솔에 출력합니다.

public class Main {
  public static void main(String args[]) {
    HashMap<String, String> hm = new HashMap<String, String>();

    hm.put("A", "One");
    hm.put("B", "Two");
    hm.put("C", "Three");

    hm.forEach((key, value) -> {
      System.out.println("KEY: " +  key + " / VALUE: " + value);
    });
  }
}

실행 결과

KEY: A / VALUE: One
KEY: B / VALUE: Two
KEY: C / VALUE: Three

위 예제는 다음 예제처럼 Consumer 기능적 인터페이스를 인수로 사용하는 람다식으로 변경할 수 있습니다.

public class Main {
  public static void main(String args[]) {
    HashMap<String, String> hm = new HashMap<String, String>();

    hm.put("A", "One");
    hm.put("B", "Two");
    hm.put("C", "Three");

    hm.entrySet().forEach((entry) -> {
      System.out.println("KEY: " +  entry.getKey() + 
              " / VALUE: " + entry.getValue());
    });
  }
}

방법 6. Iterator.forEachRemaining() 메서드

Java 8 Version 이상인 경우 Iterator 인터페이스에 추가된 forEachRemaining() 메서드를 사용할 수 있습니다.

 

다음 예제는 Iterator의 forEachRemaining() 메서드를 사용하여 키-값 쌍을 콘솔에 출력합니다.

public class Main {
  public static void main(String args[]) {
    HashMap<String, String> hm = new HashMap<String, String>();

    hm.put("A", "One");
    hm.put("B", "Two");
    hm.put("C", "Three");

    hm.entrySet().iterator().forEachRemaining((entry) -> {
      System.out.println("KEY: " +  entry.getKey() + 
              " / VALUE: " + entry.getValue());
    });
  }
}

실행 결과

KEY: A / VALUE: One
KEY: B / VALUE: Two
KEY: C / VALUE: Three

 

반응형

'Java > 컬렉션' 카테고리의 다른 글

[Java]ArrayList 값 변경 방법  (0) 2022.08.29
[Java]Stack 특정 값 존재하는지 확인하는 방법  (0) 2022.08.23
[Java]ArrayList 중복 제거  (0) 2022.06.27
[Java]HashSet 정렬  (0) 2022.06.27
[Java]ArrayList 정렬  (0) 2022.06.23

댓글