1. 리스트 생성하기
고정 값으로 List 만들기
리스트에 미리 정해진 값을 입력하여 생성합니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
배열로부터 List 만들기
배열을 기반으로 리스트를 생성합니다.
Integer[] arr = new Integer[]{1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
주의: 배열 타입이 기본 타입(int[])인 경우, 변환 시 오류가 발생합니다.
기존 리스트로 새로운 List 만들기
기존 리스트의 내용을 기반으로 새로운 리스트를 생성합니다.
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = new LinkedList<>(list1);
2. 고정 크기 리스트 (Fixed-size List)
Arrays.asList를 사용하면 고정 크기의 리스트가 생성됩니다.
이 리스트는 값 수정은 가능하지만, 추가/삭제는 불가능합니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.set(0, 6); // 가능
list.add(6); // 오류 발생!
list.remove(0); // 오류 발생!
3. 리스트를 배열로 변환하기
배열에 값 복사하기
리스트의 값을 하나씩 배열에 복사합니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int[] arr = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i);
}
toArray를 사용하기
리스트를 배열로 간단히 변환할 수 있습니다.
List<String> list = Arrays.asList("A", "B", "C");
String[] arr = list.toArray(String[]::new);
stream을 사용하기
Stream을 활용하여 배열로 변환합니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
4. 리스트 요소 삭제 시 주의사항
List<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
int size = list.size();
for (int i = 0; i < size; i++) {
list.remove(0); // 모든 요소가 정상적으로 삭제됨
}
삭제 시 발생하는 문제
리스트를 반복문으로 탐색하며 삭제하면 인덱스가 꼬여 예상대로 동작하지 않을 수 있습니다.
List<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
for (int i = 0; i < list.size(); i++) {
list.remove(i); // 인덱스 변화로 일부 요소가 삭제되지 않음
}
해결 방법
- 0번째 요소만 삭제: 리스트 크기를 고정한 반복문 사용
5. Immutable List 만들기
Immutable 리스트의 필요성
함수에 리스트를 전달할 때, 원본 리스트가 수정되지 않도록 보호해야 할 경우가 있습니다.
Collections.unmodifiableList를 사용하면 리스트를 변경 불가능한 형태로 만들 수 있습니다.
List<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
updateList(Collections.unmodifiableList(list));
System.out.println(list); // 원본 리스트는 수정되지 않음
변경 불가능한 리스트 생성
void updateList(final List<Integer> list) {
list.set(0, 10); // Error: UnsupportedOperationException 발생
}
핵심 정리
- 리스트 생성: Arrays.asList, 배열 기반, 기존 리스트 복제
- 고정 크기 리스트: 값 변경 가능, 크기 변경 불가능
- 리스트 → 배열: toArray, stream을 활용
- 삭제 주의사항: 인덱스 관리에 유의
- Immutable 리스트: Collections.unmodifiableList로 원본 보호
⚠️ 꼭 기억해야 할 핵심 내용
리스트 → 배열 변환 시 Stream 활용
Stream을 사용하여 리스트를 배열로 변환하는 방법은 특히 primitive 타입에 유용합니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
리스트 삭제 시 주의점: 인덱스 문제 해결
리스트 삭제 시 반복문을 사용할 때는 리스트 크기를 미리 고정한 후 0번째 요소만 삭제하면 문제가 발생하지 않습니다.
List<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
int size = list.size();
for (int i = 0; i < size; i++) {
list.remove(0); // 모든 요소가 정상적으로 삭제됨
}
'백엔드 > JAVA' 카테고리의 다른 글
| [JAVA] Arrays.sort와 Compator (1) | 2025.01.03 |
|---|---|
| [Java] 맵(Map) (0) | 2024.12.04 |
| [JAVA] Stream API (0) | 2024.12.01 |
| [JAVA] 자료구조와 알고리즘 (0) | 2024.11.26 |