Skip to content

Latest commit

 

History

History
47 lines (25 loc) · 2.37 KB

ArrayList vs LinkedList 그리고 Vector.md

File metadata and controls

47 lines (25 loc) · 2.37 KB

ArrayList vs LinkedList 그리고 Vector

ArrayListLinkedListJCF(Java Collection Framework)의 형태로 제공되며 List 인터페이스를 상속한다.

ArrayList

ArrayList데이터들이 순서대로 쭉 늘어선 배열의 형식을 가지고 있으며 요소를 추가하거나 삭제 할 때는 이미 리스트의 크기가 정해져 있어서 임시 배열을 생성해서 데이터를 복사하는 방법을 사용한다.

array_list

ArrayList는 각 요소의 위치 값 즉, index를 가지고 있으므로 해당 요소의 index 값을 통해 값에 접근할 수 있다.


LinkedList

LinkedList는 각 노드의 앞과 뒤에 있는 노드의 주솟값으로 연결되어 있어서 요소를 추가하거나 삭제 할 때는 앞과 뒤쪽 노드의 주솟값만 바꿔주면 된다.

linked_list

LinkedList앞의 요소부터 차례대로 노드가 참조하고 있는 주소 값을 찾아가야 하므로 검색이 느리다.


즉, 데이터의 삽입, 삭제에 대한 처리가 많으면 LinkedList가 성능 상 유리하고 데이터의 검색 즉, 참조 처리가 많으면 ArrayList를 사용하는 것이 유리하다.


Vector

Vector의 기본적인 동작은 ArrayList와 동일하다. 하지만, 가장 큰 차이점은 동기화 처리에서 나온다.

멀티쓰레드 환경에서 데이터의 동기화 처리는 중요한 부분이다.
동기화는 복수의 쓰레드로부터 데이터의 추가나 삭제가 일어났을 때 내부의 데이터는 안전하게 처리되도록 하는 것이다.

Vector의 경우 무조건 동기화처리를 한다. 즉, 싱글쓰레드 환경에서의 VectorArrayListLinkedList보다 성능이 떨어진다.

사실, Java 1.2 버전 이상부터의 Vector는 이전 버전과의 호환을 위해서 많이 쓰인다. 동기화 처리가 필요환 환경에서는 Collection.synchronizedCollection(Collection c)synchronized List, Map을 사용하는 것이 성능상 더 유리하다.


---

Reference