Java에서 for문을 이용하여 리스트를 탐색, 순회하는 방법에 대해서 알아보겠습니다.

1. for문을 이용한 방법

기본적인 for 루프입니다. for문에서 index를 리스트 크기까지 증가시키면서 리스트의 모든 요소를 순회합니다.

  • Arrays.asList("apple", "banana", "cherry") : 인자로 전달된 객체들을 갖고 있는 리스트 생성
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));

        for (int i = 0; i < fruits.size(); i++) {
            System.out.println(fruits.get(i));
        }
    }
}

Output:

apple
banana
cherry

2. 향상된 for문을 이용한 방법

for (String fruit : fruits) 와 같은 형태를 향상된 for문이라고 합니다. 리스트의 모든 요소들이 순회하면서 fruit에 대입됩니다. 만약 index가 필요하다면 일반적인 for문을 사용해야 합니다.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));

        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

Output:

apple
banana
cherry

3. Iterator를 이용한 방법

리스트의 Iterator 객체를 얻고, Iterator를 통해서 리스트의 모든 요소를 순회할 수 있습니다.

  • 아래 예제는 while을 사용하여 Iterator의 끝에 도달할 때까지 리스트를 탐색합니다.
  • iterator.hasNext() : 다음 요소가 있으면 true, 끝에 도달해서 다음 요소가 없으면 false 리턴
  • fruits.iterator() : 리스트의 Iterator 객체를 리턴
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));

        Iterator<String> iterator = fruits.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

Output:

apple
banana
cherry

4. Stream을 이용한 방법

List.stream()는 리스트를 스트림으로 변환합니다.

Stream.forEach()를 사용하여 모든 요소들을 순회할 수 있습니다. forEach()는 함수를 인자로 받습니다.

  • (fruit) -> System.out.println(fruit) : 인자 1개를 전달하고, 리턴 값은 없는 함수
  • forEach(System.out::println)와 같이, 메소드 레퍼런스 방식을 이용할 수도 있습니다. (동작은 동일)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));

        fruits.stream().forEach((fruit) -> System.out.println(fruit));
        // fruits.stream().forEach(System.out::println);   // 이 방법도 가능
    }
}

Output:

apple
banana
cherry

5. Java 8의 forEach를 이용한 방법

리스트도 List.forEach() 함수를 제공하며, 위와 같이 함수를 인자로 받습니다.

  • 이 예제에서는 forEach(System.out::println)와 같이, 메소드 레퍼런스 방식으로 구현함
  • (fruit) -> System.out.println(fruit)처럼 함수를 직접 구현해도 동작은 동일함
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));

        fruits.forEach(System.out::println);
    }
}

Output:

apple
banana
cherry