List — 순서가 있는 컬렉션

List — 순서가 있는 컬렉션

List<E>사용자가 리스트의 각 요소가 어디에 삽입될지 정확히 제어할 수 있는 순서 있는 컬렉션이에요. 정수 인덱스(리스트 내 위치)로 요소에 접근하고, 리스트에서 요소를 검색할 수 있어요. 집합과 달리 리스트는 일반적으로 중복 요소를 허용해요. SequencedCollection 인터페이스를 확장해요.

출처: Java API Reference

본문

public interface List<E> extends SequencedCollection<E>

List 인터페이스는 Collection 인터페이스가 명시한 것 외에도 iterator, add, remove, equals, hashCode 메서드의 계약에 추가 조건을 둬요. 리스트는 (자바 배열처럼) 0 기반이에요. 일부 구현(LinkedList 등)에서는 인덱스 연산이 인덱스 값에 비례해 시간이 걸릴 수 있으므로, 구현을 모른다면 인덱스 순회보다 반복자 순회가 보통 더 좋아요.

ListListIterator라는 특수 반복자를 제공해 요소 삽입·교체와 양방향 접근을 지원해요. subList로 범위 뷰를 얻을 수 있어요.

조회와 순회

  • size() / isEmpty() / contains(Object) / iterator() — 기본 연산이에요.
  • get(int index) / set(int index, E) — 위치 기반 접근과 교체예요.
  • indexOf(Object) / lastIndexOf(Object) — 첫/마지막 일치 인덱스를 반환하고, 없으면 -1을 반환해요.
  • listIterator() / listIterator(int index) — 위치에서 시작하는 리스트 반복자를 반환해요.
  • subList(int from, int to)from(포함)~to(제외) 범위의 뷰를 반환해요. 예: list.subList(from, to).clear()로 범위를 제거해요.

수정

  • add(E) / add(int, E) / addAll(Collection) / addAll(int, Collection) — 추가 연산들이에요.
  • remove(Object) / remove(int) / removeAll(Collection) / retainAll(Collection) / clear() — 제거 연산들이에요.
  • replaceAll(UnaryOperator) — 각 요소에 연산자를 적용한 결과로 교체해요.
  • sort(Comparator) — 지정 비교자로 안정 정렬해요. null 비교자면 자연 순서를 사용해요.

변환과 팩토리

  • toArray() / toArray(T[] a) — 배열로 변환해요. x.toArray(new String[0])처럼 타입을 지정할 수 있어요.
  • of(E...) — 지정 요소를 가진 수정 불가능한 리스트를 반환해요(List.of()부터 List.of(e1,...,e10)까지, 가변 인자 버전 포함).
  • copyOf(Collection) — 주어진 컬렉션을 순회 순서대로 담은 수정 불가능한 리스트를 반환해요(null 요소 불가).

순서 보존 메서드

addFirst/addLast, getFirst/getLast, removeFirst/removeLast, reversed() 같은 SequencedCollection의 메서드를 상속해요.

동등성과 해시

equals(Object)는 두 리스트가 같은 크기이고 대응하는 모든 요소 쌍이 같은 경우 true를 반환해요(같은 요소를 같은 순서로). hashCode()31*hashCode + 요소.hashCode() 공식으로 계산해 list1.equals(list2)이면 해시코드도 같음을 보장해요.

더 알아보기 (Learn more)