List — 순서가 있는 컬렉션
List — 순서가 있는 컬렉션
List<E>는 사용자가 리스트의 각 요소가 어디에 삽입될지 정확히 제어할 수 있는 순서 있는 컬렉션이에요. 정수 인덱스(리스트 내 위치)로 요소에 접근하고, 리스트에서 요소를 검색할 수 있어요. 집합과 달리 리스트는 일반적으로 중복 요소를 허용해요. SequencedCollection 인터페이스를 확장해요.
본문
public interface List<E> extends SequencedCollection<E>
List 인터페이스는 Collection 인터페이스가 명시한 것 외에도 iterator, add, remove, equals, hashCode 메서드의 계약에 추가 조건을 둬요. 리스트는 (자바 배열처럼) 0 기반이에요. 일부 구현(LinkedList 등)에서는 인덱스 연산이 인덱스 값에 비례해 시간이 걸릴 수 있으므로, 구현을 모른다면 인덱스 순회보다 반복자 순회가 보통 더 좋아요.
List는 ListIterator라는 특수 반복자를 제공해 요소 삽입·교체와 양방향 접근을 지원해요. 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)이면 해시코드도 같음을 보장해요.