Programming/Java

[Java]Vector, ArrayList, LinkedList의 차이

MB Brad KWON 2013. 4. 17. 22:06

vector는 내부적으로 배열의 구조를 지니고 있습니다.

그래서 인덱스로 요소에 접근할 경우 상수시간으로 접근 할 수 있죠.

하지만, item들이 추가되거나 삭제를 할 때는

내부적으로 임시 배열을 생성해서 복사한다음

item들을 이동시키게 됩니다. 이런 경우, 비용이 많이 들게 되고 성능이 떨어지죠.

 

반면,  list에서는

item들과의 연결이 포인터로 되어 있어

item의 추가와 삭제가 빠릅니다.

하지만, item들을 검색하는 시간은 o(n)의 비용이 발생하게 됩니다.

 

vector의 경우는 item들을 저장한 이후 변동이 별로 없다면 효과적이고

list의 경우 item의 추가 삭제가 많을 경우 유용하다고 할 수 있겠습니다. 


Vector와 LinkedList가 위의 경우와 같다고 생각할 수 있습니다.

단 , ArrayList는 LinkedList와 다르다는 점을 인식하셔야 합니다. 

ArrayList는 Vector와 동일한 내부구조를 지니고 있고 다른 점은 멀티쓰레드로

공유자원으로 활용시 Vector는 한 스레드가 접근 했을 시에 다른 스레드의 접근을 제한합니다. 즉, 동기화를 지원합니다. 반면 ArrayList를 활용시 다른 쓰레드의 접근을 허용하지요.

성능을 생각하면 ArrayList이고 동기화의 과정이 준수되어야 하는 상황에서는 ArrayList와 Vector를 둘 다 씁니다.

왜냐하면, Collection.synchronizedCollection(Collection c)로 동기화 옵션을 설정해줄 수 있기 때문입니다.

Vector는 자바 컬렉션 모델에서 초창기 모델이고 ArrayList는 wrapping된 버젼업 모델이기 때문에

Java에서는 Vector를 잘 사용하지 않는 상황입니다.


출처 : http://blog.daum.net/mk_library/9