공통점
둘 다 크기가 동적인 배열을 사용하고 싶을 때 사용한다.
차이점
- 동기화 여부
- Vector는 동기화 되어있으며 한번에 하나의 쓰레드만 Vector 메소드를 호출할 수 있다.
- ArrayList는 동기화 되어있지 않아서 동시에 여러 쓰레드가 접근 할 수 있다.
- ArrayList를 여러 쓰레드가 동시에 작업하는 경우엔 명시적으로 동기화 하는 코드를 추가해줘야 한다.
- ThreadSafe
- Vector는 동기화 되어 있기 때문에 멀티쓰레드 환경에서 ThreadSafe하다.
- 성능
- ArrayList는 동기화 되어있지 않기 때문에 동기화된 Vector보다 당연히 빠르다.
- 크기 증가
- 최대 인덱스를 초과하는 경우 배열의 크기를 증가시켜야 하는데 이 때 ArrayList는 현재 크기의 50%를 증가시키고 Vector는 100%를 증가시킨다.
결론
멀티쓰레드 환경에서는 Vector를 사용하는게 좋고 멀티쓰레드 환경이 아닌 알고리즘 문제나 다른 경우에는 ArrayList를 사용하는게 좋을 수 있다. 근데 Java에서 Vector를 쓴 코드를 찾기 힘든데는 이유가 있지 않을까? 멀티쓰레드 환경에서도 ArrayList를 사용하고 동기화 코드를 추가해주는게 좋을 것 같다.
'Java' 카테고리의 다른 글
StringBuilder, StringBuffer, System.out.print, append (1) | 2019.07.11 |
---|---|
2차원 배열의 깊은 복사, 임의의 클래스 복사 (0) | 2019.06.13 |
비트 연산자 & 쉬프트 연산자 (0) | 2019.05.27 |
정수와 실수 자료형의 최소값과 최대값 (0) | 2019.05.04 |
자바 n진수 변환 (0) | 2019.04.12 |