반응형
Java에서 List 데이터 처리는 다양한 반복문과 도구를 활용하여 효율적으로 수행할 수 있습니다. 여기서는 for와 for-each 반복문, Iterator와 ListIterator, 그리고 Stream API를 활용한 함수형 프로그래밍을 다룹니다. 각 방식의 장단점을 비교하며 Java 반복문 활용법, List 데이터 처리와 같은 검색어를 자연스럽게 포함해 설명합니다. 예제 코드는 한글 데이터를 사용하여 실용성을 높였습니다.
1. for와 for-each 반복문
for 반복문과 for-each 반복문은 Java에서 가장 기본적인 반복문입니다.
for 반복문
인덱스를 기반으로 반복할 때 사용되며, 특정 인덱스에 접근하거나 변경 작업을 수행하기에 적합합니다.
예제
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("사과");
fruits.add("바나나");
fruits.add("포도");
// for 반복문
for (int i = 0; i < fruits.size(); i++) {
System.out.println((i + 1) + "번째 과일: " + fruits.get(i));
}
}
}
출력 결과
1번째 과일: 사과
2번째 과일: 바나나
3번째 과일: 포도
for-each 반복문
컬렉션의 모든 요소를 순회할 때 사용하며, 코드가 간결합니다. 수정이 아닌 읽기 작업에 적합합니다.
예제
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> cities = new ArrayList<>();
cities.add("서울");
cities.add("부산");
cities.add("대구");
// for-each 반복문
for (String city : cities) {
System.out.println("도시 이름: " + city);
}
}
}
출력 결과
도시 이름: 서울
도시 이름: 부산
도시 이름: 대구
비교
- for 반복문: 인덱스에 접근 가능, 요소 수정이 용이
- for-each 반복문: 코드 간결성, 요소 순회에 적합
반응형
2. Iterator와 ListIterator의 사용법
Iterator는 컬렉션 요소를 순회하는 표준 방식입니다. ListIterator는 List에 특화된 확장 기능을 제공합니다.
Iterator
Iterator는 요소를 하나씩 순회하며, 요소 삭제에 적합합니다.
예제
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> animals = new ArrayList<>();
animals.add("고양이");
animals.add("강아지");
animals.add("토끼");
// Iterator 사용
Iterator<String> iterator = animals.iterator();
while (iterator.hasNext()) {
String animal = iterator.next();
if (animal.equals("강아지")) {
iterator.remove(); // 강아지 제거
}
}
System.out.println("남은 동물: " + animals);
}
}
출력 결과
남은 동물: [고양이, 토끼]
ListIterator
ListIterator는 양방향 탐색과 요소 수정을 지원합니다.
예제
import java.util.ArrayList;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> colors = new ArrayList<>();
colors.add("빨강");
colors.add("파랑");
colors.add("노랑");
// ListIterator 사용
ListIterator<String> listIterator = colors.listIterator();
while (listIterator.hasNext()) {
String color = listIterator.next();
if (color.equals("파랑")) {
listIterator.set("초록"); // "파랑"을 "초록"으로 수정
}
}
System.out.println("변경된 색상 목록: " + colors);
}
}
출력 결과
변경된 색상 목록: [빨강, 초록, 노랑]
비교
- Iterator: 요소 삭제에 적합, 단방향 탐색
- ListIterator: 양방향 탐색 및 수정 가능
3. Stream API를 활용한 함수형 프로그래밍
Stream API는 데이터 필터링, 매핑, 정렬을 간결하게 처리하는 함수형 프로그래밍 도구입니다.
Stream의 기본 사용
예제
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
// Stream 사용
List<Integer> doubled = numbers.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
System.out.println("두 배가 된 값: " + doubled);
}
}
출력 결과
두 배가 된 값: [20, 40, 60]
고급 예제: 필터링과 정렬
예제
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("이민수");
names.add("김철수");
names.add("박영희");
// 이름 정렬 및 "김"씨 필터링
List<String> sortedKimNames = names.stream()
.filter(name -> name.startsWith("김"))
.sorted()
.collect(Collectors.toList());
System.out.println("김씨 성을 가진 정렬된 이름: " + sortedKimNames);
}
}
출력 결과
김씨 성을 가진 정렬된 이름: [김철수]
비교
- for/for-each 반복문: 간단한 작업에 적합
- Iterator/ListIterator: 요소 삭제, 양방향 탐색에 유용
- Stream API: 필터링, 정렬 등 복잡한 데이터 처리에 최적화
참고 사이트
Java 공식 문서: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
반응형
'JAVA' 카테고리의 다른 글
[JAVA] List성능 비교와 최적화 (0) | 2024.11.19 |
---|---|
[JAVA] List 활용 (2) | 2024.11.18 |
[JAVA] Immutable List (불변 리스트) (0) | 2024.11.18 |
[JAVA] List와 동기화 (0) | 2024.11.18 |
[JAVA] List의 데이터 변환과 처리 (0) | 2024.11.17 |
[JAVA] List의 데이터 정렬과 검색 (1) | 2024.11.17 |
[JAVA] List의 주요 구현체와 특징 (0) | 2024.11.16 |
[JAVA] List 인터페이스의 주요 메서드 (0) | 2024.11.16 |