LIST는 Java의 Collection Framework에 포함된 인터페이스로, 순서가 있는 데이터 집합을 다루는 데 사용됩니다. List는 중복 요소를 허용하며, 요소가 추가된 순서를 유지합니다. 이는 ArrayList, LinkedList, Vector 등의 구체적 구현 클래스에 의해 실질적으로 동작합니다.
순서 보장: 요소들이 추가된 순서대로 유지됩니다.
중복 허용: 동일한 요소를 여러 번 추가할 수 있습니다.
인덱스를 통한 접근: 배열처럼 0 기반 인덱스를 사용하여 요소에 접근 가능합니다.
유연한 크기: 배열과 달리 크기가 동적으로 조정됩니다.
메서드 | 설명 | 예제 코드 |
add(E element) | 리스트의 끝에 요소를 추가. | list.add("Java"); |
add(int index, E element) | 특정 위치에 요소를 삽입. | list.add(1, "Spring"); |
get(int index) | 지정한 인덱스에 있는 요소를 반환. | String value = list.get(0); |
set(int index, E element) | 지정한 위치의 요소를 새 값으로 대체. | list.set(0, "Updated"); |
remove(int index) | 지정한 인덱스의 요소를 제거. | list.remove(1); |
size() | 리스트에 있는 요소의 개수를 반환. | int size = list.size(); |
contains(Object o) | 특정 요소가 리스트에 있는지 확인. | boolean hasItem = list.contains("Java"); |
clear() | 리스트의 모든 요소를 제거. | list.clear(); |
isEmpty() | 리스트가 비어 있는지 확인. | boolean empty = list.isEmpty(); |
toArray() | 리스트를 배열로 변환. | String[] array = list.toArray(new String[0]); |
클래스 | 특징 | 적용 사례 |
ArrayList | - 내부적으로 배열로 구현 | 데이터 읽기가 많고 삽입/삭제가 적은 경우 |
- 빠른 읽기(get), 느린 삽입/삭제(add/remove) | ||
LinkedList | - 이중 연결 리스트로 구현 | 큐(Queue) 또는 스택(Stack)처럼 활용할 때 |
- 삽입/삭제가 빠름, 읽기 속도는 느림 | ||
Vector | - ArrayList와 유사하지만 동기화 지원 | 멀티스레드 환경에서 안전한 리스트가 필요할 때 |
- 멀티스레드 환경에서 사용 가능 | ||
CopyOnWriteArrayList | - 쓰기 작업 시 배열 복사 | 동시 읽기 작업이 빈번하며 쓰기 작업이 적을 때 |
- 동기화 지원 | ||
- 읽기 위주 작업에서는 안전하고 성능이 좋음 |
특성 | ArrayList | LinkedList |
내부 구조 | 동적 배열 | 이중 연결 리스트 |
삽입/삭제 속도 | 요소 중간 삽입/삭제 느림 | 요소 중간 삽입/삭제 빠름 |
읽기 속도 | 빠름 | 느림 |
메모리 효율성 | 요소 외 메모리 오버헤드 적음 | 각 노드에 추가적인 메모리 필요 |
적합한 경우 | 읽기 작업이 많을 때 | 삽입/삭제 작업이 많을 때 |
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Spring");
list.add("Hibernate");
// 읽기
System.out.println("첫 번째 요소: " + list.get(0));
// 수정
list.set(1, "Spring Boot");
// 삭제
list.remove(2);
// 전체 출력
for (String item : list) {
System.out.println(item);
}
}
}
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(10);
list.addFirst(5);
list.addLast(15);
// 중간 삽입
list.add(1, 8);
// 삭제
list.removeFirst();
System.out.println("리스트 내용: " + list);
}
}
Java의 List는 다양한 개발 시나리오에서 강력한 도구로 활용될 수 있습니다. 특히, 적절한 구현 클래스를 선택하고 Java의 최신 기능과 결합한다면 더 높은 생산성을 얻을 수 있습니다. 이 글이 List에 대한 이해를 돕고, 개발에 실질적으로 도움을 주는 자료로 활용되기를 바랍니다.
[JAVA] 자바 21 버전 특징 및 새로운 기능 (1) | 2024.11.28 |
---|---|
[JAVA] 접근 제어자(private, protected, public) 차이점 (0) | 2024.11.26 |
[JAVA] User-Agent를 통해서 PC/MOBILE 구분하는 방법 (0) | 2022.11.01 |
[JAVA] UUID 클래스 고유식별자, RANDOM 데이터 추출 (0) | 2022.05.10 |
[JAVA] 문자열 마지막 콤마 제거하기(꿀팁) (0) | 2022.01.18 |