콜렉션 프레임워크 - 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하는 경우 경우 리스트를 수정하는 코드 블록을 동기화하던가, 간단한 변경만을 허용하도록 해야 한다.

vector

Performance

Vector가 동기화(thread-safe)되었기 때문에 ArrayList에 비해 더 느리다.

만약 스레드가 Vector에 작업을 하고 있으면 다른 스레드들은 lock이 풀릴 때까지 대기한다.

Data Growth

ArrayList와 Vector 모두 동적으로 사이즈가 늘어나거나 줄어들지만 resize의 방식이 다르다.

ArrayList는 현재 사이즈의 50%씩 늘리며 Vector는 현재 사이즈의 100%, 즉 두배로 늘린다.

Traversal

Vector는 벡터 요소를 순회(traversal)하는 데 Enumeration(열거)과 Iterator(반복자)를 모두 사용할 수 있지만 ArrayList는 순회를 위해 Iterator 만 사용할 수 있다.