LinkedList는 List 인터페이스뿐만 아니라 Queue와 Deque 인터페이스도 구현하고 있다.
즉, LinkedList 자체가 List이면서도 Queue, Deque도 된다.
큐는 FIFO의 용도로 사용한다. (First In First Out)
즉, 먼저 들어온 원소가 먼저 나간다.
Deque는 Double Ended Queue의 약자로 Queue 인터페이스를 확장하였기 때문에, Queue의 기능을 모두 포함한다.
대신, 맨 앞에 값을 넣거나 빼는 작업, 맨 뒤에 값을 넣거나 빼는 작업을 수행하는 데 용이하도록 되어 있다.
java.lang.Object
-> java.util.AbstractCollection<E>
-> java.util.AbstractList<E>
-> java.util.AbstractSequentialList<E>
-> java.util.LinkedList<E>
AbstractList와 AbstractSequentialList의 차이점은 add(), set(), remove() 등의 메소드에 대한 구현 내용이 상이하다는 정도다.
위에서 설명한 것 처럼 LinkedList 클래스는 List도 되고 Queue도 된다.
두 인터페이스의 기능을 모두 구현한 특이한 클래스라고 볼 수 있다.
게다가 Deque 인터페이스도 구현하므로, 맨 앞과 끝의 데이터를 쉽게 처리할 수 있다.
LinkedList는 일반적인 배열 타입의 클래스와 다르게 생성자로 객체를 생성할 때 처음부터 크기를 정하지 않는다.
왜냐하면, 각 데이터들이 앞 뒤로 연결되는 구조이기 때문에, 미리 공간을 만들어 놓을 필요가 없다.
LinkedList() -> 비어 있는 LinkedList 객체를 생성한다.
LinkedList(Collection<? extends E> c) -> 매개 변수로 받은 컬렉션 객체의 데이터를 LinkedList에 담는다.
LinkedList 클래스는 구현한 인터페이스의 종류가 매우 많기 때문에, 메소드의 종류도 다양하다.
addFirst(Object) -> LinkedList 객체의 가장 앞에 데이터를 추가한다.
offerFirst(Object) -> LinkedList 객체의 가장 앞에 데이터를 추가한다.
push(Object) -> LinkedList 객체의 가장 앞에 데이터를 추가한다.
add(Object) -> LinkedList 객체의 가장 뒤에 데이터를 추가한다.
addLast(Object) -> LinkedList 객체의 가장 뒤에 데이터를 추가한다.
offer(Object) -> LinkedList 객체의 가장 뒤에 데이터를 추가한다.
offerLast(Object) -> LinkedList 객체의 가장 뒤에 데이터를 추가한다.
add(int, Object) -> LinkedList 객체의 특정 위치에 데이터를 추가한다.
set(int, Object) -> LinkedList 객체의 특정 위치에 있는 데이터를 수정한다. 그리고 기존에 있던 데이터를 리턴한다.
addAll(Collection) -> 매개 변수로 넘긴 컬렉션의 데이터를 추가한다.
addAll(int, Collection) -> 매개 변수로 넘긴 컬렉션의 데이터를 지정된 위치에 추가한다.
getFirst() -> LinkedList 객체의 맨 앞에 있는 데이터를 리턴한다.
peekFirst() -> LinkedList 객체의 맨 앞에 있는 데이터를 리턴한다.
peek() -> LinkedList 객체의 맨 앞에 있는 데이터를 리턴한다.
element() -> LinkedList 객체의 맨 앞에 있는 데이터를 리턴한다.
getLast() -> LinkedList 객체의 맨 뒤에 있는 데이터를 리턴한다.
peekLast() -> LinkedList 객체의 맨 뒤에 있는 데이터를 리턴한다.
get(int) -> LinkedList 객체의 지정한 위치에 있는 데이터를 리턴한다.
contains(Object) -> 매개 변수로 넘긴 데이터가 있을 경우 true를 리턴한다.
indexOf(Object) -> 매개 변수로 넘긴 데이터의 위치를 앞에서부터 검색하여 리턴한다. 없을 경우 -1.
lastIndexOf(Object) -> 매개 변수로 넘긴 데이터의 위치를 끝에서부터 검색하여 리턴한다. 없을 경우 -1.
remove() -> LinkedList 객체의 가장 앞에 있는 데이터를 삭제하고 리턴한다.
removeFirst() -> LinkedList 객체의 가장 앞에 있는 데이터를 삭제하고 리턴한다.
poll() -> LinkedList 객체의 가장 앞에 있는 데이터를 삭제하고 리턴한다.
pollFirst() -> LinkedList 객체의 가장 앞에 있는 데이터를 삭제하고 리턴한다.
pop() -> LinkedList 객체의 가장 앞에 있는 데이터를 삭제하고 리턴한다.
pollLast() -> LinkedList 객체의 가장 끝에 있는 데이터를 삭제하고 리턴한다.
removeLast() -> LinkedList 객체의 가장 끝에 있는 데이터를 삭제하고 리턴한다.
remove(int) -> 매개 변수에 지정된 위치에 있는 데이터를 삭제하고 리턴한다.
remove(Object) -> 매개 변수로 넘겨진 객체와 동일한 데이터 중 앞에서부터 가장 처음에 발견된 데이터를 삭제한다.
removeFirstOccurrence(Object) -> 매개 변수로 넘겨진 객체와 동일한 데이터 중 앞에서부터 가장 처음에 발견된 데이터를 삭제한다.
removeLastOccurenece(Object) -> 매개 변수로 넘겨진 객체와 동일한 데이터 중 뒤에서부터 가장 처음에 발견된 데이터를 삭제한다.
LinkedList는 너무 메소드가 많아서 헷갈린다.
따라서 개발팀 내부에서 어떤 메소드를 사용할 지 정해서 혼돈을 피해야할 것 같다.