본문 바로가기
자료구조

LinkedList

by 앙헬디마리아 2021. 2. 7.
728x90

LinkedList는 List 구현 클래스이므로 ArrayList와 사용 방법은 똑같지만 내부 구조는 완전 다르다.

 

ArrayList는 내부 배열에 객체를 저장해서 인덱스로 관리하지만, LinkedList는 인접 참조를 링크해서 체인처럼 관리한다.

 

 

LinkedList에서 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다.

 

특정 인덱스에 객체를 삽입할 때에도 마찬가지다. ArrayList는 중간 인덱스의 객체를 제거하면 뒤의 객체는 인덱스가 1씩 앞으로 당겨진다고했다. 그렇기 때문에 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList 보다 LinkedList가 더 좋은 성능을 발위한다.

다음사진은 중간에 객체를 제거할 경우 앞뒤 링크의 수정이 일어나는 모습이다.

LinkedList를 생성하기 위해서는 저장할 객체 타입을 타입 파라미터(E)에 표기하고 기본 생성자를 호출하면 된다.

 

LinkedList가 처음 생성될 때에는 어떠한 링크도 만들어지지 않기 때문에 내부는 비어 있다고 보면 된다.

 

List<E> list = new LinkedList<E>();

주로 LinkedList와 ArrayList를 많이 비교하는데 두개에 10000개의 객체를 삽입하는데 걸린 시간을 측정해 보자.

 

5배의 속도차이를 확인 할 수 있다.

끝에서부터 (순차적으로) 추가/삭제하는 경우는 ArrayList가 빠르지만, 중간에 추가 또는 삭제할 경우는 앞뒤 링크 정보만 변경하면 되는 LinkedList가 더 빠르다. ArrayList는 뒤쪽 인덱스들을 모두 1씩 증가 또는 감소시키는 시간이 필요하므로 처리 속도가 느리다.

728x90

'자료구조' 카테고리의 다른 글

HashSet  (0) 2021.03.01
Arraylist  (0) 2021.02.07