자주 쓰는 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 를 못 쓰게 되므로 유용성이 반감되는 것 같다.
'JAVA' 카테고리의 다른 글
[ JAVA ] Property 파일 변경 된 사항 실시간 적용 되도록 하는 법 (2) | 2013.05.19 |
---|---|
[ JAVA ] 동적으로 class , method 실행 시킬 수 있는 reflection 사용법 (0) | 2013.05.19 |
[ JAVA ] System.getProperty("file.encoding") 변경 방법 (0) | 2013.03.12 |
[ JAVA ] Iterator Pattern ( iterator 패턴 ) (0) | 2013.02.18 |
[ JAVA ] Singletern Pattern ( 디자인 패턴 ) (0) | 2013.02.18 |
댓글