List

순서가 있고 중복을 허용하는 자료구조입니다. 인덱스로 요소에 접근할 수 있습니다.

특징

항목설명
순서유지됨 (인덱스 존재)
중복허용
크기가변 (동적)

Java에서의 List

// 인터페이스
List<String> list;

// 주요 구현체
List<String> arrayList  = new ArrayList<>();
List<String> linkedList = new LinkedList<>();

구현체 비교

항목ArrayListLinkedList
내부 구조배열노드 연결
조회O(1) 빠름O(n) 느림
삽입/삭제 (중간)O(n) 느림O(1) 빠름
메모리연속분산

자주 쓰는 메서드

메서드용도시간 (ArrayList)
List.add원소 추가O(1) 평균
List.get인덱스로 조회O(1)
List.set인덱스 위치 값 변경O(1)
List.remove삭제O(n)
List.size개수O(1)
List.isEmpty비었는지 확인O(1)
List.contains포함 여부O(n)
List.indexOf첫 등장 인덱스O(n)
List.clear모든 원소 삭제O(n)
List.toArray배열로 변환O(n)
List.sort정렬O(n log n)

List vs Set vs Map

자료구조순서중복접근 방식
ListOO인덱스
SetXX값 자체
MapX키 X, 값 O키

정렬

List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 2));

list.sort(null);                       // [1, 2, 3] (Java 8+)
list.sort(Comparator.reverseOrder());  // [3, 2, 1]

자세한 정렬 방법은 List.sort / Collections.sort / Stream.sorted / Comparator 참고.

핵심 정리

List는 순서와 중복을 모두 허용하는 컬렉션 인터페이스로, 가장 자주 쓰는 구현체는 ArrayList(배열 기반, 조회 빠름)와 LinkedList(연결 리스트, 중간 삽입 빠름)입니다. 알고리즘 문제에서는 거의 ArrayList가 정답이며, LinkedList는 앞/뒤 삽입·삭제가 매우 빈번한 큐/덱 용도일 때만 고려합니다. Java 8+에서는 list.sort()가 추가되어 Collections.sort보다 권장됩니다.

CSLOG에서 보기