Open HanaHww2 opened 1 year ago
for (Element e : elements) {
... // e로 무언가를 한다.
}
elements 안의 각 원소의 e에 대해
라고 읽는다.파괴적인 필터링(destructive filtering) 컬렉션을 순회하면서 선택된 원소를 제거해야 한다면 remove 메서드를 호출해야 한다. 자바 8부터는 Collection의 removeIf 메서드를 사용해 컬렉션을 명시적으로 순회하는 일을 피할 수 있다.
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
for (Integer number : numbers) {
if (number % 2 == 0) {
numbers.remove(number);
}
}
변형(transforming) 리스트나 배열을 순회하면서 그 원소의 값 일부 혹은 전체를 교체해야 한다면 리스트의 반복자나 배열의 인덱스를 사용해야 한다.
이 경우 for-each 루프를 사용할 수는 있지만, 새로운 리스트나 배열을 만드는 과정에서 일시적으로 두 개의 리스트나 배열을 가지고 있어야 하므로 메모리 사용량이 더 많아질 수 있다.
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> doubledNumbers = new ArrayList<>();
for (Integer number : numbers) {
doubledNumbers.add(number * 2);
}
병렬 반복(parallel iteration) 여러 컬렉션을 병렬로 순회해야 한다면 각각의 반복자와 인덱스 변수를 사용해 명시적으로 제어해야 한다.
병렬 스트림(parallel stream)을 사용하여 요소를 병렬로 처리해야한다.
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
numbers.parallelStream().forEach(System.out::println);
인덱스 변수를 사용하지 않을 때 for-each나 while문을 쓰곤 하는데 예전에 반복문들 간의 성능이 궁금해서 찾아본 적이 있어요. while문이 조금 더 나았던 거로 기억하는데 오랜만에 다시 한번 찾아봐야겠네요
인덱스가 필요하지 않을 때는 for each를 써야겠네요
향상된 포문은 편합니다. 그러나, 인덱스가 또 필요할 때가 있긴 한 것 같습니다.