본문 바로가기
Programming/JAVA

Collection 정리

by 유주원 2013. 1. 3.

Vector

- 동기화 처리가 내부적으로 이루어진다.

- 예를 들어 한 쓰레드에서 어떤 작업을 하고 있으면 다른 쓰레드에서는 접근할 수 없도록 한번에 하나의 쓰레드만 사용할 수 있도록 내부적으로 처리되고 있다.

- 단일 쓰레드에서는 불필요한 처리 코드만 가지게 되기 때문에 ArrayList나 LinkedList에 비해 성능 저하를 가져오게 된다.

- 동기화를 고려한다면 Vector의 사용 보다는 Collection.synchronizedCollection(Collection C)나 synchronizedList, Map 등을 사용하는 것이 낫다.


ArrayList

- 내부적으로 따로 동기화 처리를 하지 않는다.

- 동기화 처리를 위해선 Collection.synchronizedCollection을 사용해야 한다.

- 데이터의 추가/삭제 작업이 발생했을 시, 내부적으로 배열 복사가 일어난다.(데이터가 많을 수록 성능 저하가 심함.)

- 하지만 개개 요소의 index를 따로 가지고 있어서 많은 데이터를 검색하는데에 용이하다.


LinkedList

- 내부적으로 따로 동기화 처리를 하지 않는다.

- 동기화 처리를 위해선 Collection.synchronizedCollection을 사용해야 한다.

- C의 연결리스트라고 생각하면 된다.

- 데이터의 추가/삭제 시, 요소의 링크 값만 넘겨주면 되기 때문에, 많은 양의 데이터도 빠르게 처리가 가능하다.

- 하지만 개개 요소의 index를 따로 가지고 있지 않아서 많은 데이터를 검색할 경우 순차적 접근의 검색을 해야한다. (헤더부터 시작해서 링크를 따라가며 검색. 많은 성능 저하)


Hashtable

- 동기화 처리가 내부적으로 이루어진다.

- Key와 value를 이용하여 데이터를 관리한다.

- 객체의 순서를 따지기 보다는 검색의 개념이 뚜렷한 Class(List처럼 입력된 순서대로 데이터가 저장되지 않음)


HashMap

- 내부적으로 따로 동기화 처리를 하지 않는다.

- Collections.synchronizedMap(New HashMap(...))을 이용하여 따로 동기화를 처리한다.

- Key와 value를 이용하여 데이터를 관리한다.

- 객체의 순서를 따지기 보다는 검색의 개념이 뚜렷한 Class(List처럼 입력된 순서대로 데이터가 저장되지 않음)