이번 포스팅은 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 |
댓글