# 벡터(Vector)

# 벡터란 무엇인가요?

벡터는 동적으로 요소를 할당할 수 있는 동적배열입니다. 또한 중복을 허용하고 순서가 있고 랜덤 접근이 가능합니다.

벡터와 ArrayList의 차이점

Vector는 동기화 된 메소드로 구성되어 있습니다.
따라서 멀티 스레드가 동시에 이 메소드들을 실행할 수 없어 멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있습니다.

# 벡터의 사용법

  • Vector 선언
import java.util.Vector;

Vector V = new Vector();
Vector<String> V = new Vector();    // 타입설정 가능
  • Vector 사용 함수들
V.add("Hello"); // 기본적으로 맨 뒤에 데이터 추가
V.add(1, "Hi"); // index 1 에 데이터 추가

V.set(2, "Apple");  // index 2 에 있는 값 변경

V.remove(1);    // index 1 에 있는 값 삭제
V.removeAllElements();  // 모든 데이터 삭제
V.clear();  // 모든 데이터 삭제

V.size();   //벡터의 현재 사용한 크기 구하기
V.capacity();   //벡터의 총 용량 구하기

V.get(1);   // index 1 에 있는 값 출력

# 벡터의 시간 복잡도는 얼마나 되나요?

  • 탐색, 맨 뒤의 요소를 삭제 및 삽입 : O(1)
  • 맨 뒤나 맨 앞이 아닌 요소를 삭제 및 삽입 : O(n)

맨 뒤의 요소를 삽입시

뒤에서부터 삽입하는 push_back()의 경우 시간복잡도가 O(1)이라고 했습니다.
실제로는 '2의 제곱승 +1' 마다 크기를 2배로 늘리기 때문에, 평균시간복잡도가 O(3)이 나옵니다.
1이라는 상수 시간보다는 크지만, 상수 시간에 가까운 amortized 복잡도를 가지기 때문에 O(1)이라고 합니다.

# 벡터의 장점은 무엇인가요?

  • 항상 동기화가 되어있습니다. (장점이자 단점입니다.)
  • Collection 프레임워크에 없는 메서드들을 사용할 수 있습니다.

# 벡터의 단점은 무엇이 있나요?

  • Arraylist에 비해 추가, 검색, 삭제의 성능이 떨어집니다.

# 참고자료

출처: 주홍철.면접을 위한 CS 전공지식 노트.서울:길벗,2022.
출처: https://crazykim2.tistory.com/570