LinkedList — 이중 연결 리스트

LinkedList — 이중 연결 리스트

LinkedList<E>ListDeque 인터페이스의 이중 연결 리스트 구현이에요. 모든 선택적 리스트 연산을 구현하고 모든 요소(null 포함)를 허용해요. 인덱스로 접근하는 연산은 지정 인덱스에 더 가까운 쪽(처음 또는 끝)에서 순회해요.

출처: Java API Reference

본문

public class LinkedList<E> extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, Serializable

이 구현은 동기화되지 않아요. 여러 스레드가 동시에 접근하고 구조적으로 수정한다면 외부 동기화가 필요해요. 보통 Collections.synchronizedList(new LinkedList(...))로 감싸서 만들어요. iterator/listIterator가 반환하는 반복자는 fail-fast여서 생성 후 반복자의 remove/add 외 방법으로 구조가 수정되면 ConcurrentModificationException을 던져요.

생성자

  • LinkedList() — 빈 리스트를 만들어요.
  • LinkedList(Collection c) — 지정된 컬렉션의 요소를 그 반복자 순서대로 담아 만들어요.

양끝 접근 (Deque 연산)

  • getFirst() / getLast() — 첫/마지막 요소를 반환해요.
  • removeFirst() / removeLast() — 첫/마지막 요소를 제거하고 반환해요.
  • addFirst(E) / addLast(E) — 처음/끝에 요소를 삽입해요.
  • peek() / element() — 머리(첫 요소)를 제거하지 않고 반환해요.
  • poll() / remove() — 머리를 제거하고 반환해요.
  • offer(E) / offerFirst(E) / offerLast(E) — 꼬리/앞/뒤에 요소를 추가해요.
  • peekFirst() / peekLast() — 비어 있으면 null을 반환하는 버전의 조회예요.
  • pollFirst() / pollLast() — 비어 있으면 null을 반환하는 버전의 제거예요.
  • push(E) / pop() — 리스트가 나타내는 스택에 넣고/빼는 연산으로 addFirst/removeFirst와 동등해요.
  • removeFirstOccurrence(Object) / removeLastOccurrence(Object) — 처음/마지막 일치 요소를 제거해요.
  • descendingIterator() — 역순 반복자를 반환해요.

리스트 연산

  • contains(Object) / size() / clear() — 기본 리스트 연산이에요.
  • add(E) / add(int, E) / addAll(Collection) / addAll(int, Collection) — 추가 연산들이에요.
  • remove(Object) / remove(int) — 요소 제거 연산이에요.
  • get(int) / set(int, E) / indexOf(Object) / lastIndexOf(Object) — 위치 기반 접근이에요.
  • listIterator(int) — 지정 위치에서 시작하는 ListIterator를 반환해요.

기타

  • clone() — 얕은 복사본을 반환해요(요소 자체는 복제되지 않아요).
  • toArray() / toArray(T[] a) — 리스트를 배열로 변환해요.
  • spliterator()SIZED/ORDERED 특성을 보고하는 late-binding·fail-fast Spliterator를 만들어요.
  • reversed() — 반대 순서의 뷰를 반환해요.

더 알아보기 (Learn more)