Java에서 지도를 탐색하는 네 가지 구체적인 방법에 대해서는 아래의 자세한 설명을 참조하세요.
방법 1 이것은 가장 일반적이며 대부분의 경우 가장 바람직한 횡단 방법입니다. 키와 값이 모두 필요한 경우에 사용됩니다.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> 항목 : map.entrySet()) { System.out.println("Key = " + 항목. getKey() + ", Value = " + Entry.getValue()) }
방법 2는 for-each 루프에서 키나 값을 순회합니다.
맵에 키나 값만 필요한 경우에는 EntrySet을 사용하는 대신 keySet이나 값을 통해 순회할 수 있습니다.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //맵의 키를 탐색합니다. for (Integer key : map.keySet()) { System.out.println("Key = " + key ) ; } //맵의 값을 탐색합니다. for (Integer value : map.values()) { System.out.println("Value = " + value) }
이 방법은 EntrySet 순회보다 성능이 약간 더 좋고(10% 더 빠름) 코드가 더 깔끔합니다.
세 번째 방법은 Iterator를 사용하여 순회합니다.
제네릭을 사용하십시오 .
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> 항목 = map.entrySet().iterator() while (entries.hasNext()) Map.Entry<Integer, Integer> 항목 = 항목.next() System.out.println("Key = " + Entry.getKey() + ", Value = " + Entry.getValue()) }
제네릭을 사용하지 않고:
Map map = new HashMap(); 반복자 항목 = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry 항목 = (Map.Entry) 항목.next(); 정수)entry.getKey(); 정수 값 = (정수)entry.getValue() System.out.println("Key = " + key + ", Value = " + 값); }
keySet 및 값에 동일한 접근 방식을 적용할 수도 있습니다.
이 접근 방식은 중복되는 것처럼 보이지만 장점이 있습니다. 우선, 이는 이전 버전의 Java에서 맵을 탐색하는 유일한 방법입니다. 또 다른 이점은 iterator.remove()를 호출하여 순회하는 동안 항목을 삭제할 수 있다는 것인데, 다른 두 메서드에서는 이를 삭제할 수 없습니다. javadoc에 따르면 for-each 순회에서 이 방법을 사용하려고 하면 결과를 예측할 수 없습니다.
성능 관점에서 볼 때 이 방법은 각 순회(예: 방법 2)의 성능과 유사합니다.
방법 4: 키별로 값을 찾아 순회(낮은 효율성)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Integer value = map.get(key); + 키 + ", 값 = " + 값);
방법 1에 대한 대안으로 이 코드는 더 깔끔해 보이지만 실제로는 상당히 느리고 비효율적입니다. 키에서 값을 가져오는 것은 시간이 많이 걸리는 작업이기 때문입니다(방법 1에 비해 이 방법은 다른 Map 구현에서 20%~200% 더 느립니다). FindBugs가 설치되어 있으면 비효율적인 탐색을 확인하고 경고합니다. 따라서 사용을 피하십시오.
요약
키나 값만 필요한 경우 방법 2를 사용하세요. 사용 중인 언어 버전이 Java 5보다 낮거나 순회 중에 항목을 삭제하려는 경우 방법 3을 사용해야 합니다. 그렇지 않으면 방법 1(키와 값 모두)을 사용하십시오.