JAVA

[ JAVA ] 자주 쓰는 Collection API 정리

정윤재 2013. 5. 19. 01:15

자주 쓰는 Collection class 는 3개가 있는데

 

1. ArrayList

 

2. Vector

 

3. LinkedList

 

이다. 이 3개는 나름대로 각기의 특징이 있는데

 

첫번째인 ArrayList 의 경우 List 가 쌓여 있는데 중간의 Object를 

 

수정, 삭제 하는 속도가 가장 빠르다고 한다.

 

그리고 thread 에 safe 하지 않다. (이것이 Vector보다 빠른

 

가장 중요한 이유라고 한다.)

 

물론 ArrayList를 thread safe 하게 해 주는 방법은 api 문서에 

 

아래와 같이 나와 있다.

 

List list = Collections.synchronizedList(new ArrayList(...));

 

이렇게 해서 쓰는 것과 Vector 간의 성능 테스트를 좀 해봐야 할 것 같은데

 

그건 다음 글로 넘기도록 하겠다.

 

웹 게시판 등을 구현하는데 있어서 데이터를 List 형식으로 관리 하는데는

 

thread safe 와 아무런 관련이 없으니 (호출되는 하나의 thread 마다

 

새로운 ArrayList 가 new 로 객체가 될 테니) 웹개발에서는 일반적으로

 

ArrayList 를 쓰면 될 것으로 보인다.

 

두번째인 Vector 의 경우 thread safe 가 가장 큰 특징이여서 (synchronized 되어 있음)

 

다수의 쓰레드를 사용하는 Server 프로그램 에서 사용하기 좋을 것으로 보인다.

 

위에서 ArrayList 를 thread safe 한 것과 성능 테스트는 나중에 해보도록 하겠다.

 

선입 선출로 사용할 수 있는 방법을 생각 해 봤는데

 

아래와 같이 프로그램을 짜면 될 것 같다.

 

public static void main(String[] args) {

// TODO Auto-generated method stub

 

Vector vector = new Vector();

 

vector.add("1111");

 

vector.add("2222");

 

String str = "";

 

while(true){

try{

 

System.out.println((String)vector.remove(0));

 

}catch(ArrayIndexOutOfBoundsException e){

break;

}//try

}//while

 

System.out.println("end");

}

 

세번째로 LinkedList 가 있는데 

 

이것은 앞뒤로 붙는 데이터에 대한 접근이 가장 빠르다는 장점이 있는데

 

thread safe 하지 않아서 java 프로그래밍을 하면서는 잘 보기 힘든

 

자료구조이다. 물론 thread safe 하게 하려면 ArrayList 와 같이

 

List list = Collections.synchronizedList(new LinkedList(...)); 와 같이 해주면

 

되지만 어짜피 그렇게 되면 List 형태가 되어 큰 장점인

 

removeFirst() [return type : Object]
removeLast() 

[return type : Object]

 

와 같은 method 를 못 쓰게 되므로 유용성이 반감되는 것 같다.