본문 바로가기

컴퓨터공학/Java

CS> Array List 와 Linked List의 차이점??

Interface supports an ordered sequence of elements

Vector, ArrayList, LinkedList

 

 

Vector

 처음부터 만들어져서 지금까지 유지되어 온 리스트 계열의 컬렉션

특별히 크기를 지정하지 않을 경우 사이즈를 늘릴 경우 두 배 씩 늘린다. 

synchronised

 

ArrayList

사이즈를 늘리면 50% 씩 늘린다.

synchronised를 지원하지 않아서 벡터보다 빠르다.

리스트 인터페이스를 구현했기 때문에 기본적으로 순서를 가지고 element에 인덱스를 부여한다.

랜덤하게 element를 access할 경우 인덱스만으로 빠르게 접근가능하다. 

추가나 삭제는 인덱스를 재배치해야해서 속도가 현저히 느릴 수 있다. 

 

LinkedList

리스트 계열이지만 노드 개념으로 앞뒤 element가 연결되어 있다.

앞 element를 head, 뒤 element를  tail 이라고 한다.

추가 삭제할 경우 head와 tail 만 바꾸면 된다.

삽입 삭제는 쉽지만 읽는 건 느리다. 

왜냐하면 인덱스 기능을 사용하지 않아서 처음부터 element를 확인하는 순차적인 접근을 이용하기 때문이다. 

일반적으로 단방향성을 가지고 있어서 인덱스를 이용하여 자료를 검색하는 어플리케이션에는 부적합.

 

리스트 계열의 컬렉션은  비슷하나 상황에 맞게 사용해야한다.

 

정리

Vector

synchronised elements, huge size increase

Array List

better for random accessing elements by index, slow for add/remove

Linked List

large number of add/remove operation but rarely random access of elements

 

 

[JAVA Collections API] 자료구조 요약: 구조/성능/용도 :: 센의 백과사전 블로그 (tistory.com)

 

[JAVA Collections API] 자료구조 요약: 구조/성능/용도

개요 이 포스팅에서는 자바 Collections API로 표현되는 자료구조들의 성능에 대해서 이야기하고자 한다. 성능은 시간 복잡도(Time Complexity)를 기준으로 하며, 발생할 수 있는 최대 복잡도를 가리키는

gem1n1.tistory.com