CodeGym/Java Blog/무작위의/Java에서 맵을 반복하는 방법
John Squirrels
레벨 41
San Francisco

Java에서 맵을 반복하는 방법

무작위의 그룹에 게시되었습니다
회원
이 게시물에서는 Java에서 Map을 반복하는 다양한 방법을 배웁니다. 몇 가지 일반적인 방법과 예를 통해 이를 사용하는 방법입니다. 시작하기 전에 Java의 인터페이스맵을 이해하고 있다고 가정합니다. 그러나 여기에 간단한 요약이 있습니다.

Java에서 맵이란 무엇입니까?

이에 대한 해석은 다양하지만 간단히 이렇게 표현해 보자.
"지도는 키-값 쌍의 형태로 데이터를 저장하는 데 사용되는 Java의 인터페이스입니다."
지도가 무엇에 사용되는지 생각하고 있다면? 아니면 언제 필요합니까? 그런 다음 실생활에서 데이터를 키-값 쌍으로 저장해야 하는 상황이 많이 있습니다. 예를 들어, 사전에서 한 글자에 해당하는 모든 단어는 Java에서 맵 형태로 저장할 수 있습니다.
케이 연, 왕, 한국, 기사, ... 등
용암, 생명, 빛, 사랑, 레바논, ... 등
또한 다음 예를 보면 이를 더 잘 이해할 수 있습니다.
열쇠
가족 ID 가족 구성원들
클래스 이름 학생증
지역 이름 우편번호
영역 블록 집 번호

맵을 반복해야 하는 이유는 무엇입니까?

데이터 액세스, 수정 또는 제거를 위해 맵을 순회하거나 반복해야 합니다. 우리가 가진 몇 가지 옵션을 살펴보겠습니다.

Java에서 맵을 반복하는 일반적인 방법은 무엇입니까?

맵을 횡단하는 방법은 여러 가지가 있지만. 그러나 가장 효율적이고 간단한 방법에 중점을 둘 것입니다.
  1. ForEach 루프 방법
  2. 반복자 방법
아래에서 두 가지 방법의 구현을 찾으십시오.

Foreach 루프 방법 사용

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

public class ForEachDemo {

	public static void main(String[] args) {

		Map<String, String> businessDays = new HashMap<String, String>();

		// store business days i-e; key/value pairs in the Map
		businessDays.put("1", "Monday");
		businessDays.put("2", "Tuesday");
		businessDays.put("3", "Wednesday");
		businessDays.put("4", "Thursday");
		businessDays.put("5", "Friday");

		// Iterating over the Map.entrySet() using map.forEach
		for (Map.Entry<String, String> entry : businessDays.entrySet())
		{
			System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
		}
	}
}

산출

키 = 1, 값 = 월요일 키 = 2, 값 = 화요일 키 = 3, 값 = 수요일 키 = 4, 값 = 목요일 키 = 5, 값 = 금요일

설명

이 예제에서는 foreach 루프를 사용하여 맵을 반복했습니다. for-each 루프를 사용하여 키-값 쌍의 형태로 맵에서 데이터의 자동화된 "보기"를 제공하는 entrySet()을 얻습니다. 각 entrySet에는 키와 해당 값이 포함되어 있습니다. 요구 사항에 따라 Map.Entry<key, value> 의 모든 메서드를 사용할 수 있습니다 . 여기서는 콘솔에 데이터를 표시하기 위해 getKey()getValue() 만 사용했습니다 . 연습으로 이 개념에 대한 명령을 강화하기 위한 나머지 방법을 탐색할 수 있습니다.

반복자 방법 사용

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

public class MapIterator {

	public static void main(String[] args) {

		Map<String, String> monthsInAYear = new HashMap<String, String>();

		// store business days i-e; key/value pairs in the Map
		monthsInAYear.put("1", "January");
		monthsInAYear.put("2", "February");
		monthsInAYear.put("3", "March");
		monthsInAYear.put("4", "April");
		monthsInAYear.put("5", "May");
		monthsInAYear.put("6", "June");
		monthsInAYear.put("7", "July");
		monthsInAYear.put("8", "August");
		monthsInAYear.put("9", "September");
		monthsInAYear.put("10", "October");
		monthsInAYear.put("11", "November");
		monthsInAYear.put("12", "December");

		// iterate map / traverse the map using using iterator
		Iterator<Map.Entry<String, String>> iterator = monthsInAYear.entrySet().iterator();

		while (iterator.hasNext())
		{
			// check if next entry exists in the map
			Map.Entry<String, String> entry = iterator.next();
			System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());

		}
	}
}

산출

키 = 11, 값 = 11월 키 = 1, 값 = 1월 키 = 12, 값 = 12월 키 = 2, 값 = 2월 키 = 3, 값 = 3월 키 = 4, 값 = 4월 키 = 5, 값 = 5월 키 = 6, 값 = 6월 키 = 7, 값 = 7월 키 = 8, 값 = 8월 키 = 9, 값 = 9월 키 = 10, 값 = 10월

설명

이 예제에서는 맵을 순회/반복할 명시적 반복자를 만듭니다. 먼저 반복자 클래스를 가져온 다음 entrySet에 대한 반복자를 가져와야 합니다. 이제 지도에 존재하는 다음 엔터티를 계속 확인하면서 지도를 횡단합니다. 자! 순회가 이렇게 완료되었습니다.

Foreach 루프가 반복자 방법보다 낫습니까?

작업을 수행하는 한 맵 순회에 어떤 방법을 사용하는지는 중요하지 않습니다. 성능 측면에서 for-each 루프와 반복자는 모두 동일한 시간 복잡도를 갖습니다 . 따라서 어느 것도 다른 것보다 낫지 않으며, 언제 사용해야 하는지에 따라 다릅니다.

두 방법의 차이점은 무엇입니까?

for-each 루프는 맵의 데이터 업데이트/수정을 허용하지 않습니다. 반대로 반복자를 사용하면 데이터를 쉽게 수정할 수 있습니다. iterators 클래스는 맵에서 데이터를 편집/제거하는 구현을 제공하여 사용자를 용이하게 합니다. 반대로 for-each 루프를 사용하여 지도 데이터를 편집/삭제하려고 하면 ConcurrentModificationException 이 발생 합니다 . 그 이유는 for-each 루프가 사용자에게 노출되지 않는 반복자를 암시적으로 생성하기 때문입니다. 따라서 데이터를 수정하거나 삭제할 수 있는 액세스 권한이 없습니다.

어떤 순회 방법을 언제 사용할 것인가?

맵을 반복하기 위해 for-each 또는 반복자를 사용할지 확실하지 않은 경우 다음 제안을 사용할 수 있습니다.
  • 맵을 수정해야 하는 경우 반복자를 사용하십시오 .
  • 중첩된 루프가 있는 경우 for-each 루프를 사용하십시오 (복잡성을 피하기 위해).

결론

게시물이 끝날 때까지 Java에서 맵을 반복하는 방법을 배웠기를 바랍니다. 이를 연습하고 다른 순회 방법도 시도하는 것이 좋습니다. 막힌 느낌이 들 때마다 언제든지 뒤로 돌아가거나 질문을 게시하세요. 그때까지, 행복한 학습!
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다