반응형
1. 중복 제거: Set과 List 조합
왜 중복 제거가 필요한가?
리스트는 중복 데이터를 허용하기 때문에, 특정 데이터의 유일성을 보장해야 하는 경우 중복 제거가 필수적입니다. Set은 데이터의 중복을 자동으로 제거하는 자료구조로, 이를 활용해 리스트의 중복 데이터를 제거할 수 있습니다.
Set과 List를 조합한 중복 제거
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("김철수");
names.add("이영희");
names.add("김철수"); // 중복 데이터
// Set으로 중복 제거
Set<String> uniqueNames = new HashSet<>(names);
List<String> result = new ArrayList<>(uniqueNames);
System.out.println("중복 제거된 리스트: " + result);
}
}
출력 결과
중복 제거된 리스트: [김철수, 이영희]
Stream을 활용한 중복 제거
Java 8의 Stream API를 활용하면 더 간단히 중복을 제거할 수 있습니다.
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> cities = new ArrayList<>();
cities.add("서울");
cities.add("부산");
cities.add("서울");
// Stream으로 중복 제거
List<String> uniqueCities = cities.stream().distinct().collect(Collectors.toList());
System.out.println("중복 제거된 도시 목록: " + uniqueCities);
}
}
반응형
2. 다차원 리스트와 데이터 구조
다차원 리스트란?
다차원 리스트는 List<List<T>> 형태로, 표 형태의 데이터를 다룰 때 유용합니다. 예를 들어, 학생들의 성적을 과목별로 저장하거나 행렬 계산에 활용할 수 있습니다.
다차원 리스트의 기본 사용법
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<List<String>> students = new ArrayList<>();
// 각 학생 데이터 추가
List<String> student1 = new ArrayList<>();
student1.add("김철수");
student1.add("수학");
student1.add("90");
List<String> student2 = new ArrayList<>();
student2.add("이영희");
student2.add("과학");
student2.add("85");
students.add(student1);
students.add(student2);
// 출력
for (List<String> student : students) {
System.out.println("학생 정보: " + student);
}
}
}
출력 결과
학생 정보: [김철수, 수학, 90]
학생 정보: [이영희, 과학, 85]
다차원 리스트와 행렬 연산
다차원 리스트는 행렬 계산에도 유용합니다. 아래는 간단한 2x2 행렬의 덧셈 연산 예제입니다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<List<Integer>> matrix1 = List.of(
List.of(1, 2),
List.of(3, 4)
);
List<List<Integer>> matrix2 = List.of(
List.of(5, 6),
List.of(7, 8)
);
List<List<Integer>> result = new ArrayList<>();
for (int i = 0; i < matrix1.size(); i++) {
List<Integer> row = new ArrayList<>();
for (int j = 0; j < matrix1.get(i).size(); j++) {
row.add(matrix1.get(i).get(j) + matrix2.get(i).get(j));
}
result.add(row);
}
System.out.println("행렬 덧셈 결과: " + result);
}
}
출력 결과
행렬 덧셈 결과: [[6, 8], [10, 12]]
3. List로 큐나 스택 기능 구현
큐(Queue) 구현
큐는 FIFO(First-In-First-Out) 방식으로 동작하는 자료구조입니다. Java의 ArrayList를 활용해 간단히 큐를 구현할 수 있습니다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> queue = new ArrayList<>();
// 데이터 추가
queue.add("김철수");
queue.add("이영희");
// 데이터 제거
String first = queue.remove(0); // 첫 번째 요소 제거
System.out.println("처음 제거된 요소: " + first);
System.out.println("현재 큐 상태: " + queue);
}
}
출력 결과
처음 제거된 요소: 김철수
현재 큐 상태: [이영희]
스택(Stack) 구현
스택은 LIFO(Last-In-First-Out) 방식으로 동작합니다. Java의 ArrayList로 스택을 구현하는 방법은 다음과 같습니다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> stack = new ArrayList<>();
// 데이터 추가
stack.add("서울");
stack.add("부산");
// 데이터 제거
String last = stack.remove(stack.size() - 1); // 마지막 요소 제거
System.out.println("가장 최근 제거된 요소: " + last);
System.out.println("현재 스택 상태: " + stack);
}
}
출력 결과
가장 최근 제거된 요소: 부산
현재 스택 상태: [서울]
참고 사이트
Java 공식 문서: https://docs.oracle.com/javase/8/docs/api/java/util/List.html
반응형
'JAVA' 카테고리의 다른 글
[JAVA] List와 Java 8 이상 기능 통합 (0) | 2024.11.22 |
---|---|
[JAVA] List 자주 사용하는 유틸리티 메서드와 트릭 (0) | 2024.11.21 |
[JAVA] List 자주 발생하는 문제와 해결법 (1) | 2024.11.20 |
[JAVA] List성능 비교와 최적화 (0) | 2024.11.19 |
[JAVA] Immutable List (불변 리스트) (0) | 2024.11.18 |
[JAVA] List와 동기화 (0) | 2024.11.18 |
[JAVA] List 반복문을 활용한 처리 (0) | 2024.11.17 |
[JAVA] List의 데이터 변환과 처리 (0) | 2024.11.17 |