-
iterator, Map[공부] 프로그래밍/Spring・Spring Boot (JAVA) 2023. 4. 27. 20:47
iterator
자바에서 컬렉션(Collection)의 요소(element)들을 읽어오는 방법을 표준화한 인터페이스이다. Iterator 인터페이스는 다음과 같은 메서드들을 제공한다.
hasNext() : 다음 요소가 존재하는지 여부를 반환한다.
next() : 다음 요소를 반환한다.
remove() : 마지막으로 반환된 요소를 제거한다.
Iterator는 데이터를 단방향으로만 순회할 수 있다. 즉, 다음 요소를 읽어오기 위해서는 반드시 이전 요소를 먼저 읽어야 한다. 이러한 특징 때문에 Iterator는 List와 같은 순서가 있는 컬렉션에서 사용된다.List<String> myList = new ArrayList<>(); myList.add("apple"); myList.add("banana"); myList.add("cherry"); Iterator<String> iter = myList.iterator(); while (iter.hasNext()) { String element = iter.next(); System.out.println(element); }
위 예시에서 ArrayList 클래스를 이용하여 myList라는 이름의 리스트를 만들고, add() 메서드를 이용하여 세 개의 요소를 추가한다. 그리고 iterator() 메서드를 이용하여 Iterator 객체 iter를 생성한다. while 루프를 이용하여 Iterator가 가리키는 요소를 읽어오고, hasNext() 메서드와 next() 메서드를 이용하여 요소를 순차적으로 읽어와서 출력한다.
Map
자바에서 Key-Value 쌍으로 이루어진 데이터 구조를 나타내는 인터페이스이다. Key는 중복될 수 없으며, Value는 중복될 수 있다. Map은 다음과 같은 특징이 있다.- Key-Value 쌍으로 데이터를 저장하며, Key는 중복될 수 없다.
- Map 내부에는 Key와 Value를 연결하는 Entry 객체가 저장된다.
- Map에는 여러 가지 구현체가 있으며, 대표적으로 HashMap, TreeMap, LinkedHashMap 등이 있다.
Map 인터페이스에서 주요적으로 사용하는 메서드는 다음과 같다.
- put(K key, V value) : 지정된 Key와 Value를 Map에 저장한다.
- get(Object key) : 지정된 Key에 해당하는 Value를 반환한다.
- containsKey(Object key) : 지정된 Key가 Map에 존재하는지 여부를 반환한다.
- containsValue(Object value) : 지정된 Value가 Map에 존재하는지 여부를 반환한다.
- keySet() : Map에 저장된 모든 Key를 Set으로 반환한다.
- values() : Map에 저장된 모든 Value를 Collection으로 반환한다.
Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); System.out.println(map.get("apple")); // 1 System.out.println(map.containsKey("orange")); // false System.out.println(map.keySet()); // [banana, cherry, apple] System.out.println(map.values()); // [2, 3, 1]
Map.Entry<K, V>은 Java 프로그래밍 언어에서 사용되는 인터페이스이다. 이 인터페이스는 Java의 컬렉션 프레임워크의 일부로, 맵(Map)의 키(Key)와 값(Value) 쌍을 나타낸다.
◇ getKey(): 맵의 키를 반환한다.
◇ getValue(): 맵의 값(value)을 반환한다.
이 인터페이스는 주로 맵(Map) 구현체의 entrySet() 메서드를 통해 얻어지며, 이를 통해 맵의 모든 항목에 접근할 수 있다. 예를 들어, 다음은 Map.Entry를 사용하여 맵의 항목을 반복하는 코드의 간단한 예시이다:Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); }
Java에서는 맵을 반복하는 데 Map.Entry를 명시적으로 사용하지 않고도 반복할 수 있지만, Map.Entry는 반복 중에 키와 값을 동시에 액세스해야 할 때 특히 추가적인 유연성과 기능을 제공한다.
//keySet()과 get() 사용: Map<String, Integer> map = new HashMap<>(); // 맵에 요소 추가 for (String key : map.keySet()) { Integer value = map.get(key); // 키-값 쌍 처리 } // entrySet()과 Map.Entry 사용: Map<String, Integer> map = new HashMap<>(); // 맵에 요소 추가 for (Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); // 키-값 쌍 처리 }
◇ 성능: 엔트리 세트를 반복하는 것이 각 키마다 값을 검색하는 것보다 일반적으로 효율적입니다.
◇ 편의성: 루프 내에서 키와 값을 직접 액세스할 수 있으므로 코드가 더 읽기 쉽고 간결해집니다.
◇ 중복 조회 방지: entrySet()을 사용하면 각 키에 대해 값을 별도로 조회하는 필요가 없어지므로 Map.Entry에서 값을 직접 액세스 하는 것보다 효율적입니다.
두 가지 접근 방식 모두 유효하지만, 특히 키와 값이 모두 반복 중에 필요한 경우 entrySet()과 Map.Entry를 사용하는 것이 좋습니다. 그러나 키 또는 값만 필요한 경우 keySet() 또는 values()를 사용하는 것이 더 적절할 수 있습니다.'[공부] 프로그래밍 > Spring・Spring Boot (JAVA)' 카테고리의 다른 글
일시 생성 처리 (0) 2023.08.19 파일 확장자 제거 (0) 2023.08.19 Collections framework (0) 2023.04.27 Object 클래스, 제네릭 (0) 2023.04.24 @RestController, produces, subscribeOn (0) 2023.04.19