본문 바로가기

Java

ArrayList vs Vector

공통점

둘 다 크기가 동적인 배열을 사용하고 싶을 때 사용한다.

차이점

  1. 동기화 여부
    • Vector는 동기화 되어있으며 한번에 하나의 쓰레드만 Vector 메소드를 호출할 수 있다.
    • ArrayList는 동기화 되어있지 않아서 동시에 여러 쓰레드가 접근 할 수 있다.
    • ArrayList를 여러 쓰레드가 동시에 작업하는 경우엔 명시적으로 동기화 하는 코드를 추가해줘야 한다.
  2. ThreadSafe
    • Vector는 동기화 되어 있기 때문에 멀티쓰레드 환경에서 ThreadSafe하다.
  3. 성능
    • ArrayList는 동기화 되어있지 않기 때문에 동기화된 Vector보다 당연히 빠르다.
  4. 크기 증가
    • 최대 인덱스를 초과하는 경우 배열의 크기를 증가시켜야 하는데 이 때 ArrayList는 현재 크기의 50%를 증가시키고 Vector는 100%를 증가시킨다.

결론

멀티쓰레드 환경에서는 Vector를 사용하는게 좋고 멀티쓰레드 환경이 아닌 알고리즘 문제나 다른 경우에는 ArrayList를 사용하는게 좋을 수 있다. 근데 Java에서 Vector를 쓴 코드를 찾기 힘든데는 이유가 있지 않을까? 멀티쓰레드 환경에서도 ArrayList를 사용하고 동기화 코드를 추가해주는게 좋을 것 같다.