🖥️ Backend/Java

LinkedList 클래스 메서드 총 정리

Developer Quarterly 2025. 5. 4. 18:24

Hierarchy of Java Collections

 

LinkedList 클래스 선언부
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable

 

메서드/설명 소속 예제 결과
java.util.LinkedList
LinkedList()
LinkedList 객체를 생성
LinkedList LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");

System.out.println(list);
[Apple, Banana]
LinkedList(Collection<? extends E> c)
주어진 컬렉션을 포함하는 LinkedList 객체를 생성
LinkedList ArrayList<String> baseList = new ArrayList<>();
baseList.add("Dog");
baseList.add("Cat");

LinkedList<String> list = new LinkedList<>(baseList);
[Dog, Cat]
boolean add(E e)
리스트의 끝에 요소를 추가한다.
Collection List<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");

System.out.println(list); 
[Apple, Banana]
void add(int index, E element)
지정된 위치(index)에 요소를 삽입한다. 기존 요소는 뒤로 밀린다.
List List<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add(1, "Grape");

System.out.println(list);
[Apple, Grape, Banana]
boolean addAll(Collection<? extends E> c)
리스트 끝에 주어진 컬렉션의 모든 요소를 추가한다.
Collection List<String> extra = Arrays.asList("Cat", "Dog");
List<String> list = new LinkedList<>();
list.add("Apple");
list.addAll(extra);

System.out.println(list);
[Apple, Cat, Dog]
boolean addAll(int index, Collection<? extends E> c)
지정된 위치(index)부터 컬렉션의 모든 요소를 삽입한다.
List List<String> extra = Arrays.asList("Cat", "Dog");
List<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.addAll(1, extra);

System.out.println(list);
[Apple, Cat, Dog, Banana]
void addFirst(E e)
리스트의 맨 앞에 요소를 추가한다.
Deque Deque<String> list = new LinkedList<>();
list.addFirst("First");
System.out.println(list);
[First]
void addLast(E e)
리스트의 맨 뒤에 요소를 추가한다.
Deque Deque<String> list = new LinkedList<>();
list.addLast("Last");
System.out.println(list);
[Last]
void clear()
리스트의 모든 요소를 제거한다.
Collection LinkedList<String> list = new LinkedList<>();
list.add("A");
list.clear();
System.out.println(list);
[]
Object clone()
리스트를 얕은 복사하여 새 객체로 반환한다.
Cloneable LinkedList<String> list = new LinkedList<>();
list.add("A");
LinkedList<String> copy = (LinkedList<String>) list.clone();
System.out.println(copy);
[A]
boolean contains(Object o)
지정한 객체가 리스트에 존재하면 true를 반환한다.
Collection LinkedList<String> list = new LinkedList<>();
list.add("A");
System.out.println(list.contains("A"));
true
Iterator<E> descendingIterator()
리스트의 요소를 역순으로 순회할 수 있는 반복자를 반환한다.
Deque Deque<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("C");

Iterator<String> it = list.descendingIterator();
while (it.hasNext()) {
    System.out.print(it.next() + " ");
}
C B A
E element()
첫 번째 요소를 반환하되, 없으면 예외를 던진다.
Queue Queue<String> list = new LinkedList<>();
list.add("A");
System.out.println(list.element());
A
E get(int index)
지정된 인덱스의 요소를 반환한다.
List List<String> list = new LinkedList<>();
list.add("X"); 
list.add("Y");
System.out.println(list.get(1));
Y
E getFirst()
첫 번째 요소를 반환한다. 없으면 예외를 던진다.
Deque Deque<String> list = new LinkedList<>();
list.add("A");
System.out.println(list.getFirst());
A
E getLast()
마지막 요소를 반환한다. 없으면 예외를 던진다.
Deque Deque<String> list = new LinkedList<>();
list.add("A"); 
list.add("B");
System.out.println(list.getLast());
B
int indexOf(Object o)
주어진 객체가 처음 나타나는 인덱스를 반환하고, 없으면 -1 반환.
List List<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("A");
System.out.println(list.indexOf("A"));
0
int lastIndexOf(Object o)
주어진 객체가 마지막으로 나타나는 인덱스를 반환하고, 없으면 -1 반환.
List List<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("A");
System.out.println(list.lastIndexOf("A"));
2
ListIterator<E> listIterator(int index)
주어진 인덱스부터 순회할 수 있는 반복자를 반환한다.
List LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("C");
ListIterator<String> it = list.listIterator(1);
while (it.hasNext()) {
    System.out.print(it.next() + " ");
}
B C
boolean offer(E e)
큐의 형태로 리스트 끝에 요소를 추가한다.
Queue Queue<String> list = new LinkedList<>();
list.offer("X");
System.out.println(list);
[X]
boolean offerFirst(E e)
큐의 앞쪽(헤드)에 요소를 삽입한다.
Deque Deque<String> list = new LinkedList<>();
list.offerFirst("Start");
System.out.println(list);
[Start]
boolean offerLast(E e)
큐의 뒤쪽(꼬리)에 요소를 삽입한다.
Deque Deque<String> list = new LinkedList<>();
list.offerLast("End");
System.out.println(list);
[End]
E peek()
첫 요소를 반환하되 제거하지 않는다. 없으면 null 반환.
Queue Queue<String> list = new LinkedList<>();
list.add("A");
System.out.println(list.peek());
A
E peekFirst()
peek()와 동일
Deque Deque<String> list = new LinkedList<>();
list.add("A");
System.out.println(list.peekFirst());
A
E peekLast()
마지막 요소를 확인한다.
Deque Deque<String> list = new LinkedList<>();
list.add("A");
list.add("B");
System.out.println(list.peekLast());
B
E poll()
첫 요소를 반환하고 제거한다. 없으면 null 반환.
Queue Queue<String> list = new LinkedList<>();
list.add("A");
list.add("B");
System.out.println(list.poll());
A
E pollFirst()
poll()과 동일
Deque Deque<String> list = new LinkedList<>();
list.add("A");
list.add("B");
System.out.println(list.pollFirst());
A
E pollLast()
리스트 끝의 요소를 꺼내서 제거한다.
Deque Deque<String> list = new LinkedList<>();
list.add("X");
list.add("Y");
System.out.println(list.pollLast());
Y
E pop()
스택처럼 리스트의 첫 번째 요소를 제거하고 반환한다. (없으면 예외 발생)
Deque Deque<String> list = new LinkedList<>();
list.push("A");
list.push("B");
System.out.println(list.pop());
B
void push(E e)
스택처럼 리스트의 앞에 요소를 추가한다. (addFirst()와 동일)
Deque Deque<String> list = new LinkedList<>();
list.push("X");
System.out.println(list);
[X]
E remove()
첫 번째 요소를 제거하고 반환한다. (없으면 예외 발생)
Collection LinkedList<String> list = new LinkedList<>();
list.add("A");
System.out.println(list.remove());
A
E remove(int index)
지정된 인덱스의 요소를 제거하고 반환한다.
List LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
System.out.println(list.remove(1));
B
boolean remove(Object o)
주어진 객체를 처음으로 만나는 위치에서 제거한다.
Collection LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("A");
list.remove("A");
System.out.println(list);
[B, A]
E removeFirst()
첫 번째 요소를 제거하고 반환한다. (없으면 예외 발생)
Deque Deque<String> list = new LinkedList<>();
list.add("Start");
list.add("End");
System.out.println(list.removeFirst());
Start
boolean removeFirstOccurrence(Object o)
주어진 객체가 처음으로 나타나는 위치의 요소를 제거한다.
Deque Deque<String> list = new LinkedList<>();
list.add("X");
list.add("Y");
list.add("X");
list.removeFirstOccurrence("X");
System.out.println(list);
[Y, X]
E removeLast()
마지막 요소를 제거하고 반환한다. (없으면 예외 발생)
Deque Deque<String> list = new LinkedList<>();
list.add("A");
list.add("B");
System.out.println(list.removeLast());
B
boolean removeLastOccurrence(Object o)
주어진 객체가 마지막으로 나타나는 위치의 요소를 제거한다.
Deque Deque<String> list = new LinkedList<>();
list.add("X");
list.add("Y");
list.add("X");
list.removeLastOccurrence("X");
System.out.println(list);
[X, Y]
E set(int index, E element)
지정된 위치의 요소를 주어진 요소로 교체한다.
List LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.set(1, "Z");
System.out.println(list);
[A, Z]
Object[] toArray()
리스트의 모든 요소를 Object 배열로 반환한다.
Collection LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
Object[] array = list.toArray();
System.out.println(Arrays.toString(array));
[A, B]
<T> T[] toArray(T[] a)
리스트의 모든 요소를 지정한 타입 배열에 복사하여 반환한다.
Collection LinkedList<String> list = new LinkedList<>();
list.add("A"); list.add("B");
String[] arr = list.toArray(new String[0]);
System.out.println(Arrays.toString(arr));
[A, B]
int size()
리스트에 저장된 요소의 개수를 반환한다.
Collection LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
System.out.println(list.size());
2

 

Q. 왜? linkedlist 컬렉션을 사용할 때 대부분 add()를 사용하지않고 offer() 메서드를 사용할까?

A. LinkedList가 Queue 또는 Deque 인터페이스로 사용되는 경우가 많기 때문이다.

 

Q. LinkedList가 여러 인터페이스를 구현하면서 비슷해 보이는 메서드들이 많은 이유는?

A. 다양한 인터페이스 용도에 맞게 다형성을 활용하라는 의도로 제공된 것이며, 선언 시 의도한 사용 목적에 맞는 부모 타입으로 사용하는 것이 가장 좋은 설계 방식