Programming/JAVA

[JAVA] Iterator (반복자) 의 사용법

읁; 2024. 4. 19. 18:54

Iterator (반복자)

 

< Iterator 란? >

An Iterator is an object that can be used to loop through collections, like ArrayList and HashSet. It is called an "iterator" because "iterating" is the technical term for looping. To use an Iterator, you must import it from the java.util package.

Iterator (반복자)는 ArrayList나, HashSet 같은 컬렉션을 순회할 때 (looping) 사용될 수 있는 객체입니다. "looping"의 기술적인 용어가 "iterating" 이기 때문에 해당 객체를 "Iterator"라고 부릅니다. 사용하기 위해서는 java.util 패키지로부터 import 해야 합니다.

 

< 주요 메소드와 사용 예제 >

 

1. Iterator (반복자) 만들기

 

Iterator를 생성하고자 하는 컬렉션에 iterator() 메소드를 사용한다.

import java.util.ArrayList;
import java.util.Iterator;

public class Main {
  public static void main(String[] args) {

      // 1. ArrayList 만들기
    List<String> fruits = new ArrayList<>();

    fruits.add("apple");
    fruits.add("banana");
    fruits.add("cherry");

    // 2. 위 ArrayList로 Iterator 만들기
    Iterator<String> it = fruits.iterator();

  }

 

 

 

 

2. Iterator를 사용해 위 ArrayList를 순회하기

 

아래 두 메소드를 사용한다.

  • .hasNext()
    • 반복자가 다음 요소를 가지고 있는지에 대한 boolean값을 출력
  • .next()
    • 반복자가 가리키고 있던 요소를 return하고, cursor를 다음 요소로 옮김

while(it.hasNext()) { // 만약 Iterator가 다음 요소를 가지고 있다면,
    System.out.println(it.next()); // 다음 요소를 출력
}

    /* 실행 결과
        apple
        banana
        cherry
    */

 

 

3. Iterator를 사용해 위 ArrayList를 거꾸로 순회하기

 

2번 과정에서 .next()를 이용해 ArrayList를 끝까지 순회했기 때문에,
현재 반복자의 cursor는 ArrayList의 가장 끝에 위치하고 있다.

그러므로 아래 두 메소드를 사용한다.

  • .hasPrevious()
    • 반복자가 이전 요소를 가지고 있는지에 대한 boolean값을 출력
  • .previous()
    • 반복자의 cursor를 이전 요소로 옮기며, 이전 요소를 return

while(it.hasPrevious()) { // 만약 Iterator가 이전 요소를 가지고 있다면,
    System.out.println(it.previous()); // 이전 요소를 출력
}
    /* 실행 결과
        cherry
        banana
        apple
    */

 

 

4. 만약 처음부터 역순으로 Iterator를 만들고 싶다면?

 

.descendingIterator() 메소드를 사용하면 된다.
이는 컬렉션의 요소들을 역순으로 정렬해줌.

import java.util.ArrayList;
import java.util.Iterator;

public class Main {
  public static void main(String[] args) {

      // 1. ArrayList 만들기
    List<String> fruits = new ArrayList<>();

    fruits.add("apple");
    fruits.add("banana");
    fruits.add("cherry");

    // 2. 위 ArrayList로 Iterator 만들기
    Iterator<String> it = fruits.descendingIterator();

    // 3. 출력하기
    while(it.hasNext()) { // 만약 Iterator가 다음 요소를 가지고 있다면,
        System.out.println(it.next()); // 다음 요소를 출력
    }

    /* 실행 결과
        cherry
        banana
        apple
    */
  }

 

 

5. Iterator를 사용해 특정 값을 컬렉션에서 지우고 싶다면

 

.remove() 메소드를 사용하자

    while(it.hasNext()) {
        String str = it.next();
            // 이렇게 커서를 옮겨줘야 한다

          if(str.startsWith("a")) {
            it.remove();
            // 현재 커서가 가리키고 있는 값을 컬렉션에서 제거.
          }
    }

    System.out.println(fruits);
        //    출력 결과 : [banana, cherry]

 

 

6. Iterator를 사용해 List의 값을 수정하고 싶다면

 

.listIterator()를 활용해 ListIterator 객체를 만들고,
이를 순회하며 .set()을 통해 원하는 값으로 수정시켜주면 된다.

import java.util.*;

public class Main {
  public static void main(String[] args) {
     List<String> fruits = new ArrayList<>();

     fruits.add("Apple");
     fruits.add("banana");
     fruits.add("cherry");

     System.out.println("수정 전 : " + fruits);
         // 출력 결과 - 수정 전 : [Apple, banana, cherry]

     // 첫 글자를 모두 대문자로 수정해보자
     ListIterator<String> it = fruits.listIterator();

     while(it.hasNext()) {
         String str = it.next();

        char ch = Character.toUpperCase(str.charAt(0));
        str = ch + str.substring(1);
        it.set(str);
     }

    System.out.println("수정 후 : " + fruits);
        // 출력 결과 - 수정 후 : [Apple, Banana, Cherry]
  }
}

 

 

 

 

참고
https://www.w3schools.com/java/java_iterator.asp
https://brandpark.github.io/java/2021/01/24/iterator.html

https://onlyfor-me-blog.tistory.com/319
https://jungyijun.tistory.com/81