본문 바로가기

JAVA APIs

LinkedList

LinkedList

LinkedList

Class LinkedList<E>

 

형태 Parameter

  • E - 컬렉션 내에 존재하는 요소의 형태

구현된 구현 인터페이스

  • Serializable, Cloneable, Iterable , Collection , List , Queue

 

List 및 Deque 인터페이스의 양방향 LinkedList 구현입니다. 리스트의 임의의 오퍼레이션을 모두 구현하고 모든 요소(null 포함)를 허용합니다. List 인터페이스를 구현하는 것 외에 LinkedList 클래스는 리스트의 시작점 및 끝점에 있는 요소를 검색 및 삭제하거나 시작점 및 끝점에 요소를 삽입하는 메서드(get, remove, insert)를 제공합니다. 이러한 오퍼레이션을 사용하면 LinkedList를 스택, 큐, 또는 양방향 큐(Deque)로써 사용할 수 있게 됩니다.


이 클래스는 offer, poll 등에 의해 선입선출법(FIFO)을 제공하는 Queue 인터페이스를 구현합니다. 다른 스택 및 Deque 오퍼레이션은 리스트의 표준 오퍼레이션에 의해 간단하게 다시 작성할 수 있습니다. 이러한 오퍼레이션은 대응하는 List 오퍼레이션보다 다소 빠른 경우도 있지만, 주로 편의상의 이유로 포함되어 있습니다.


모든 오퍼레이션은 양방향 LinkedList에서 예상되는 대로 동작합니다. 리스트를 인덱스로 처리하는 오퍼레이션은 리스트의 시작점 또는 끝점 중 더 가까운 곳에서부터 리스트를 순회합니다.


이 구현은 동기화되지 않습니다. 여러 스레드가 동시에 LinkedList에 접근하고, 스레드 중 하나 이상이 리스트를 구조적으로 변경하는 경우 외부에서 동기화되어야 합니다(구조적 변경은 하나 이상의 요소를 추가하거나 삭제하는 작업입니다. 단순히 요소의 값을 설정하는 것은 구조적 변경이 아닙니다.). 이것은 일반적으로 리스트를 자연스럽게 캡슐화하는 일부 객체에서 동기화하여 수행됩니다. 그러한 객체가 없으면 Collections.synchronizedList 메서드를 사용하여 리스트를 "Wrap" 해야 합니다. 이것은 리스트에 대한 우발적인 비동기 접근을 방지하기 위해 작성 시 수행하는 것이 가장 좋습니다.


List list = Collections.synchronizedList(new LinkedList(...));


이 클래스의 iterator 및 listIterator 메서드에 의해 리턴된 반복자는 Fail-fast입니다. 만약 반복자가 생성된 후에 반복자 자체의 remove 메서드 이외의 방법으로 리스트를 구조적으로 변경하면, 반복자는 ConcurrentModificationException을 Throw 합니다. 따라서 동시 변경을 하면, 반복자는 장래의 예측할 수 없는 시점에 있어 예측할 수 없는 동작이 발생하는 위험을 회피하기 위해서 즉시 예외를 Throw합니다.


보통, 비동기의 동시 변경이 있는 경우, 확실한 보증을 실시하는 것은 불가능해서 반복자의 'Fail-fast' 동작을 보장할 수 없습니다. 'Fail-fast' 반복자는 최선 노력 원칙에 기반해 ConcurrentModificationException을 Throw 합니다. 따라서, 정확성을 위해 이 예외에 의존하는 프로그램을 작성하는 것은 잘못된 것입니다. 반복자의 'Fail-fast' 동작은 버그를 감지하는 데에만 사용되어야 합니다.


이 클래스는 Java Collections Framework 멤버입니다.

 


도입된 버전 : 1.2

관련 항목

  • List, ArrayList, Vector, Collections.synchronizedList(List), 직렬화 된 형식

 


LinkedList의 생성자

 

LinkedList
public LinkedList()
    // 비어 있는 리스트를 생성합니다.

 

LinkedList
public LinkedList(Collection <? extends E> c)
    // 지정된 컬렉션의 요소가 포함되어 있는 리스트를, 요소가 컬렉션의 반복자에 의해 리턴된 순서대로 생성합니다.
    Parameters
    	c - 리스트에 저장될 요소가 담겨있는 컬렉션
    Exceptions
    	NullPointerException - 지정된 컬렉션이 null인 경우

 

 


LinkedList의 Method

 

getFirst
public E getFirst()
    // 리스트 내의 최초의 요소를 리턴합니다.
    Returns
    	리스트 내의 최초의 요소
    Exceptions
    	NoSuchElementException - 리스트가 비어 있는 경우

 

getLast
public E getLast()
    // 리스트 내의 마지막 요소를 리턴합니다.
    Returns
    	리스트 내의 마지막 요소
    Exceptions
    	NoSuchElementException - 리스트가 비어 있는 경우

 

removeFirst
public E removeFirst()
    // 리스트 내의 최초의 요소를 삭제해 리턴합니다.
    Returns
    	리스트 내의 최초의 요소
    Exceptions
    	NoSuchElementException - 리스트가 비어 있는 경우

 

removeLast
public E getLast()
    // 리스트 내의 마지막 요소를 삭제해 리턴합니다.
    Returns
    	리스트 내의 마지막 요소
    Exceptions
    	NoSuchElementException - 리스트가 비어 있는 경우

 

addFirst
public void addFirst(E o)
    // 리스트의 시작 점에 지정된 요소를 삽입합니다.
    Parameters
    	o - 리스트의 시작 점에 삽입될 요소

 

addLast
public void addLast(E o)
    // 리스트의 끝 점에 지정된 요소를 삽입합니다. add 메서드와 같은 기능이지만, 일관성을 위해서 제공되고 있습니다.
    Parameters
    	o - 리스트의 끝 점에 삽입될 요소

 

contains
public boolean contains(Object o)
    // 지정된 요소가 리스트에 포함되어 있는 경우, true를 리턴합니다. 즉, 리스트에 (o==null ? e==null : o.equals(e))가 되는 요소 e가 1개 이상 포함되어 있는 경우에만 true를 리턴합니다.
    Specified by
    	인터페이스 Collection <E> 내의 contains
    	인터페이스 List <E> 내의 contains
    Overrides
    	클래스 AbstractCollection <E> 내의 contains
    Parameters
    	o - 리스트에 있을지를 조사할 요소
    Returns
    	리스트가 지정된 요소를 포함하고 있는 경우, true

 

size
public int size()
    // 리스트에 있는 요소의 수를 리턴합니다.
    Specified by
    	인터페이스 Collection <E> 내의 size
    	인터페이스 List <E> 내의 size
    	클래스 AbstractCollection <E> 내의 size
    Returns
    	리스트 내의 요소 수

 

add
public boolean add(E o)
    // 리스트의 끝 점에 지정된 요소를 삽입합니다.
    Specified by
    	인터페이스 Collection <E> 내의 add
    	인터페이스 List <E> 내의 add
    Overrides
    	클래스 AbstractCollection <E> 내의 add
    Parameters
    	o - 리스트에 삽입될 요소
    Returns
    	true (Collection.add 일반 규약에 따릅니다.)

 

remove
public boolean remove(Object o)
    // 리스트 내에서 최초로 검출된 지정 요소를 삭제합니다. 그 요소가 리스트에 없는 경우, 리스트의 변경은 없습니다. 즉, (o==null ? get(i)==null : o.equals(get(i)))가 되는 최소의 인덱스 i를 가지는 요소를 삭제합니다.(그러한 요소가 존재하는 경우)
    Specified by
    	인터페이스 Collection <E> 내의 remove
    	인터페이스 List <E> 내의 remove
    Overrides
    	클래스 AbstractCollection <E> 내의 remove
    Parameters
    	o - 리스트로부터 삭제될 요소(그 요소가 있는 경우)
    Returns
    	리스트에 지정된 요소가 포함되어 있는 경우, true

 

addAll
public boolean addAll(Collection <? extends E> c)
    // 지정된 컬렉션 내의 모든 요소를 지정된 컬렉션의 반복자에 의해 리턴된 순서로 리스트의 마지막에 삽입합니다. 작업이 진행되는 동안 지정된 컬렉션이 변경되면 이 작업의 동작은 정의되지 않습니다.(지정된 컬렉션이 이 리스트 자신이고, 리스트가 비어있지 않은 경우 이 호출의 동작은 보장되지 않습니다.)
    Specified by
    	인터페이스 Collection <E> 내의 addAll
    	인터페이스 List <E> 내의 addAll
    Overrides
    	클래스 AbstractCollection <E> 내의 addAll
    Parameters
    	c - 리스트에 삽입할 요소(컬렉션)
    Returns
    	이 호출의 결과, 이 리스트가 변경되었을 경우, true
    Exceptions
    	NullPointerException - 지정된 컬렉션이 null인 경우
    References
    	AbstractCollection.add(Object)
    
public boolean addAll(int index, Collection <? extends E> c)
    // 지정된 컬렉션 내의 모든 요소를 리스트의 지정된 위치부터 삽입합니다. 현재 그 위치에 있는 요소와 후속의 요소는 오른쪽으로 이동됩니다(인덱스 값이 증가). 새로운 요소는 지정된 컬렉션의 반복자에 의해 리턴된 순서로 리스트에 삽입됩니다.
    Specified by
    	인터페이스 List <E> 내의 addAll
    Overrides
    	클래스 AbstractSequentialList 내의 addAll
    Parameters
    	index - 지정된 컬렉션으로부터 최초의 요소를 삽입하는 위치의 인덱스
    	c - 리스트에 삽입할 요소(컬렉션)
    Returns
    	이 호출의 결과, 이 리스트가 변경되었을 경우, true
    Exceptions
    	IndexOutOfBoundsException - 지정된 인덱스가 범위 외일 경우(index<0 || index>size())
    	NullPointerException - 지정된 컬렉션이 null인 경우

 

clear
public void clear()
    // 리스트로부터 모든 요소를 삭제합니다.
    Specified by
    	인터페이스 Collection <E> 내의 clear
    	인터페이스 List <E> 내의 clear
    Overrides
    	클래스 AbstractList <E> 내의 clear

 

get
public E get(int index)
    // 리스트 내에 지정된 위치에 있는 요소를 리턴합니다.
    Specified by
    	인터페이스 List <E> 내의 get
    Overrides
    	클래스 AbstractSequentialList <E> 내의 get
    Parameters
    	index - 리턴될 요소의 인덱스
    Returns
    	리스트 내에 지정된 위치에 있는 요소
    Exceptions
    	IndexOutOfBoundsException - 지정된 인덱스가 범위 외일 경우(index<0 || index>size())

 

set
public E set(int index, E element)
    // 리스트의 지정된 위치에 있는 요소를 지정된 요소로 대체합니다.
    Specified by
    	인터페이스 List <E> 내의 set
    Overrides
    	클래스 AbstractSequentialList <E> 내의 set
    Parameters
    	index - 대체될 요소의 인덱스
    	element - 지정된 위치에 대체될 요소
    Returns
    	지정된 위치에 이전에 있던 요소
    Exceptions
    	IndexOutOfBoundsException - 지정된 인덱스가 범위 외일 경우(index<0 || index>size())

 

add
public void add(int index, E element)
    // 리스트의 지정된 위치에 지정된 요소를 삽입합니다. 현재 그 위치에 있는 요소와 후속의 요소는 오른쪽으로 이동됩니다(인덱스 값이 증가).
    Specified by
    	인터페이스 List <E> 내의 add
    Overrides
    	클래스 AbstractSequentialList <E> 내의 add
    Parameters
    	index - 지정된 요소가 삽입될 인덱스
    	element - 삽입될 요소
    Exceptions
    	IndexOutOfBoundsException - 지정된 인덱스가 범위 외일 경우(index<0 || index>size())

 

remove
public E remove(int index)
    // 리스트의 지정된 위치에 있는 요소를 삭제합니다. 후속의 요소는 왼쪽으로 이동됩니다(인덱스 값이 감소). 리스트로부터 삭제된 요소가 리턴됩니다.
    Specified by
    	인터페이스 List <E> 내의 remove
    Overrides
    	클래스 AbstractSequentialList <E> 내의 remove
    Parameters
    	index - 삭제될 요소의 인덱스
    Returns
    	지정된 위치에 이전에 있던 요소
    Exceptions
    	IndexOutOfBoundsException - 지정된 인덱스가 범위 외일 경우(index<0 || index>size())

 

indexOf
public int indexOf(Object o)
    // 리스트 내에서 지정된 요소가 최초로 검출된 위치의 인덱스를 리턴합니다. 리스트에 이 요소가 없는 경우, -1을 리턴합니다. 즉, (o==null ? get(i)==null : o.equals(get(i)))가 되는 최소의 인덱스 i를 리턴합니다. 그러한 인덱스가 없는 경우, -1을 리턴합니다.
    Specified by
    	인터페이스 List <E> 내의 indexOf
    Overrides
    	클래스 AbstractList <E> 내의 indexOf
    Parameters
    	o - 검색할 요소
    Returns
    	리스트 내에서 지정된 요소가 최초로 검출된 위치의 인덱스. 리스트에 이 요소가 없는 경우, -1

 

lastIndexOf
public int lastIndexOf(Object o)
    // 리스트 내에서 지정된 요소가 마지막에 검출된 위치의 인덱스를 리턴합니다. 리스트에 이 요소가 없는 경우, -1을 리턴합니다. 즉, (o==null ? get(i)==null : o.equals(get(i)))가 되는 최대의 인덱스 i를 리턴합니다. 그러한 인덱스가 없는 경우, -1을 리턴합니다.
    Specified by
    	인터페이스 List <E> 내의 lastIndexOf
    Overrides
    	클래스 AbstractList <E> 내의 lastIndexOf
    Parameters
    	o - 검색할 요소
    Returns
    	리스트 내에서 지정된 요소가 마지막에 검출된 위치의 인덱스. 리스트에 이 요소가 없는 경우, -1

 

peek
public E peek()
    // 이 리스트의 최초의 요소를 검색하지만, 삭제하지는 않습니다.
    Specified by
    	인터페이스 Queue <E> 내의 peek
    Returns
    	큐의 최초의 요소. 큐가 비어있는 경우, null
    Since Version
    	1.5

 

element
public E element()
    // 이 리스트의 최초의 요소를 검색하지만, 삭제는 하지 않습니다.
    Specified by
    	인터페이스 Queue <E> 내의 element
    Returns
    	큐의 최초의 요소.
    Exceptions
    	NoSuchElementException - 큐가 비어있는 경우
    Since Version
    	1.5

 

poll
public E poll()
    // 이 리스트의 최초의 요소를 검색하고 삭제합니다.
    Specified by
    	인터페이스 Queue <E> 내의 poll
    Returns
    	큐의 최초의 요소. 큐가 비어있는 경우, null
    Since Version
    	1.5

 

remove
public E remove()
    // 이 리스트의 최초의 요소를 검색하고 삭제합니다.
    Specified by
    	인터페이스 Queue <E> 내의 remove
    Returns
    	큐의 최초의 요소.
    Exceptions
    	NoSuchElementException - 큐가 비어있는 경우
    Since Version
    	1.5

 

offer
public boolean offer(E o)
    // 지정된 요소를 이 리스트의 끝(마지막 요소)으로 삽입합니다.
    Specified by
    	인터페이스 Queue <E> 내의 offer
    Parameters
    	o - 삽입할 요소
    Returns
    	true(Queue.offer의 일반 규약에 따릅니다.)
    Since Version
    	1.5

 

listIterator
public ListIterator <E> listIterator(int index)
    // 리스트 내의 지정된 위치에서 시작되는 리스트 내의 요소를 적절한 순서로 반복하는 리스트 반복자를 리턴합니다. List.listIterator(int)의 일반 규약에 따릅니다.
    // 리스트 반복자는 'Fail-fast'입니다. 반복자가 생성된 후 리스트가 리스트 반복자의 자체 remove 또는 add 메서드를 통하지 않고 어떤 방식으로든 구조적으로 변경되면, ConcurrentModificationException를 Throw합니다. 따라서 동시 변경을 하면, 반복자는 장래의 예측할 수 없는 시점에 있어 예측할 수 없는 동작이 발생하는 위험을 회피하기 위해서 즉시 예외를 Throw합니다.
    Specified by
    	인터페이스 List <E> 내의 listIterator
    	클래스 AbstractSequentialList <E> 내의 listIterator
    Parameters
    	index - next() 호출에 의해 리스트 반복자로부터 리턴될 첫 번째 요소의 인덱스
    Returns
    	리스트 내의 지정된 위치로부터 시작되는 리스트 내 요소의 리스트 반복자(적절한 순서로)
    Exceptions
    	IndexOutOfBoundsException - 지정된 인덱스가 범위 외일 경우(index<0 || index>size())
    References
    	List.listIterator(int)

 

clone
public Object clone()
    // 지정된 LinkedList의 얕은 복사본을 리턴합니다. 요소 자신은 복제되지 않습니다.
    Overrides
    	클래스 Object 내의 clone
    Returns
    	이 LinkedList 인스턴스의 얕은 복사본
    References
    	Cloneable

 

toArray
public Object[] toArray()
    // 리스트 내의 모든 요소가 올바른 순서로 포함되고 있는 배열을 리턴합니다.
    Specified by
    	인터페이스 Collection <E> 내의 toArray
    	인터페이스 List <E> 내의 toArray
    Overrides
    	클래스 AbstractCollection <E> 내의 toArray
    Returns
    	리스트 내의 모든 요소가 올바른 순서로 포함되고 있는 배열
    References
    	Arrays.asList(Object[])
    
public <T> T[] toArray(T[] a)
    // 리스트 내의 모든 요소가 올바른 순서로 포함되고 있는 배열을 리턴합니다. 리턴된 배열의 런타임 유형은 지정된 배열의 련타임 유형입니다. 지정된 배열에 리스트가 들어가 있는 경우는 그 배열이 리턴됩니다. 그 외의 경우는 지정된 배열의 런타임 유형과 리스트의 사이즈를 이용해 새로운 배열을 할당합니다.
    // 배열에 리스트보다 많은 요소가 있는 경우, 컬렉션의 끝에 있는 배열의 요소는 null로 설정됩니다.(이는 리스트에 null 요소가 포함되어 있지 않음을 호출자가 알고 있는 경우에만 리스트의 길이를 결정하는 데 유용합니다.)
    Specified by
    	인터페이스 Collection <E> 내의 toArray
    	인터페이스 List <E> 내의 toArray
    Overrides
    	클래스 AbstractCollection <E> 내의 toArray
    Parameters
    	a - 배열이 충분한 크기를 가지는 경우는 리스트의 요소가 포함되는 배열. 그렇지 않은 경우는 
    		요소를 포함하기 위해서 같은 런타임 유형의 새로운 배열을 할당할 수 있습니다.
    Returns
    	리스트의 요소가 포함되어 있는 배열
    Exceptions
    	ArrayStoreException - 지정된 배열의 런타임 유형이 이 리스트에 있는 모든 요소의 런타임 유형의
    							상위 유형이 아닌 경우
    	NullPointerException - 지정한 배열이 null인 경우

 

 

출처

 

'JAVA APIs' 카테고리의 다른 글

Iterator  (0) 2021.03.23
HashSet  (0) 2021.03.23
HashMap  (0) 2021.03.23
Collection  (0) 2021.03.23
Arrays  (0) 2021.01.31