ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.