콜렉션 프레임워크 - Vector
2019-09-07
Vector
import java.util.*;
class Test {
public static void main(String[] arg)
{
// create default vector
Vector v = new Vector();
v.add(1);
v.add(2);
v.add("geeks");
v.add("forGeeks");
v.add(3);
System.out.println("Vector is " + v);
}
}
Output:
[1, 2, geeks, forGeeks, 3]
Vector는 ArrayList와 비슷하지만 동기화(synchronize)되어 있다는 차이가 있다.
문법은 거의 동일하므로 두 개의 차이점을 위주로 기술하겠다.
Synchronization
Vector는 동기화되었기 때문에 한번에 한 스레드에만 접속할 수 있지만,
ArrayList는 동기화되지 않으므로 여러 스레드가 동시에 일을 할 수 있다.
예를 들어, 멀티 스레딩 환경에서, 한 스레드가 add 작업을 하는 동안 다른 스레드가 remove 작업을 할 수 있다.
여러 스레드가 동시에 Arraylist에 access하는 경우 경우 리스트를 수정하는 코드 블록을 동기화하던가, 간단한 변경만을 허용하도록 해야 한다.
Performance
Vector가 동기화(thread-safe)되었기 때문에 ArrayList에 비해 더 느리다.
만약 스레드가 Vector에 작업을 하고 있으면 다른 스레드들은 lock이 풀릴 때까지 대기한다.
Data Growth
ArrayList와 Vector 모두 동적으로 사이즈가 늘어나거나 줄어들지만 resize의 방식이 다르다.
ArrayList는 현재 사이즈의 50%씩 늘리며 Vector는 현재 사이즈의 100%, 즉 두배로 늘린다.
Traversal
Vector는 벡터 요소를 순회(traversal)하는 데 Enumeration(열거)과 Iterator(반복자)를 모두 사용할 수 있지만 ArrayList는 순회를 위해 Iterator 만 사용할 수 있다.