본문 바로가기
자료구조

[Java] 벡터 Vector

by 서피 2021. 5. 30.

벡터는 여러 오브젝트들의 집합이다.

배열과 동일하게 int index, value 쌍으로 이루어져 있으며, 길이의 변경이 가능하기 때문에 값을 추가, 제거할 수 있다.

벡터는 자신의 저장 공간을 자동적으로 최적화하며, 이로 인해 벡터에 저장된 데이터의 값보다 실제 차지하는 용량이 더 크다. 

용량을 미리 차지하고 있다가, 값이 추가되어 용량이 부족해지면 한 번에 어느정도 추가 용량을 차지하는 방식의 계단식 증가가 이루어진다.

Iterator를 사용할 경우 fail-fast 방식을 통해 값을 반환한다.

 

Fail-Fast 방식: 벡터가 어느 쓰레드에 생성된 이후 다른 쓰레드에서 구조의 수정이 일어날 경우, ConcurrentModificationException 을 일으킨다.

이를 통해 여러 개의 쓰레드가 동시에 요청하여 구조를 변경하는 것을 막는다. 

자바 공식 문서에서는 'rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.' 라고 설명한다.

즉, B 쓰레드가 벡터의 값을 변경하였는데, 이를 모른채 A 쓰레드가 계속 실행될 경우 변경된 값으로 인해 프로그램 동작상 문제가 발생하게 되므로, 차라리 오류를 발생시켜 이를 방지한다는 의미이다.

바로 이 점이 List 자료형과의 가장 큰 차이점이다.

 


 

Vector의 필드값

protected int capacityIncrement

앞서 서술했듯이 벡터의 용량은 계단식 증가가 이루어진다.

한 번에 증가할 용량을 정의하는 변수이다.

 

protected int elementCount

벡터가 가진 유효한 값들의 갯수를 담은 변수이다.

 

protected Object[]

벡터의 값들이 저장된 버퍼 배열이다.

 

 

Vector의 주요 메소드

boolean add (E e)

e값을 벡터의 마지막에 추가한다.

 

void add (int index, E element)

element 값을 index번째(-1)의 자리에 추가한다.

 

boolean addAll (Collection <? extends E> c)

Collection의 모든 값을 벡터 마지막에 추가한다. 

이 때 추가되는 순서는 Collection의 iterator가 반환하는 대로 따른다.

 

boolean addAll (int index, Collection<? extends E> c)

위의 addAll과 동일하며, index를 통해 추가할 순서를 지정해줄 수 있다.

 

void clear ()

벡터 내의 모든 값들을 지운다.

 

Object clone ()

B벡터 = A벡터; 방식으로 벡터를 복제할 경우, 복제가 되지 않으며 메모리 주소만 공유된다.

clone()을 이용해 벡터를 복제할 수 있다.

 

boolean contains (Object o)

벡터가 o값을 포함했는지 여부를 반환한다.

 

void copyInto (Object [] anArray)

anArray배열에 벡터의 모든 값을 복사해 넣는다.

 

elementAt (int index)

index 자리의 값을 반환한다.

 

Enumeration<E> elements ()

벡터의 모든 값들을 Enumeration 형태로 반환한다.

 

boolean equals (Object o)

o 값과 동일한 벡터인지 여부를 반환한다.

 

E firstElement ()

첫 번째 값을 반환한다. (index 0)

 

void forEach (Consumer<? super E> action)

모든 값을 반환하거나, 오류가 발생할 때까지 값들을 순차적으로 반환한다.

이 때 반환은 iterator를 이용해 이루어진다.

 

get (int index)

index 자리의 값을 반환한다.

 

boolean isEmpty ()

벡터가 비었으면 true를 반환한다.

 

Iterator<E> iterator ()

벡터의 모든 값들에 대한 Iterator를 반환한다.

 

lastElement ()

벡터의 마지막 값을 반환한다.

 

int lastIndexOf (Object o)

벡터가 가진 o 값들 중 마지막 값의 index를 반환한다.

만약 값이 존재하지 않으면 -1을 반환한다.

 

remove (int index)

index 자리의 값을 지우고, 그 값을 반환한다.

이 때, 그 이후의 값들은 한 자리씩 당겨진다.

즉 n번째 인덱스 값을 지우면 n + 1번째에 있던 값이 n번째로 가게 된다.

 

void removeAllElements ()

벡터의 모든 값들을 지운 후 크기를 0으로 설정한다.

 

boolean removeIf (Predicate <? super E> filter)

인자로 전해준 필터를 만족하는 모든 값을 지운다.

 

protected void removeRange (int fromIndex, int toIndex)

fromIndex부터 toIndex 사이의 값을 모두 지운다.

fromIndex자리의 값은 지워지며, toIndex자리의 값은 지워지지 않는다.

즉, fromIndex ~ toIndex - 1 의 값이 지워진다.

 

int size ()

벡터의 길이를 반환한다.

 

void sort (Comparator <? super E> c)

인자로 전해준 c 기준에 따라 벡터를 정렬한다.

 

Object[] toArray ()

벡터의 모든 값들을 Array 형태로 반환한다.

 

String toString ()

흔히 아는 그 toString 맞다.

 

 

오라클 docs 를 직접 번역 및 서술.

https://docs.oracle.com/javase/8/docs/api/java/util/Vector.html

'자료구조' 카테고리의 다른 글

[Java] PriorityQueue와 Queue의 차이  (0) 2021.04.16
정규표현식 주요 표현 정리  (0) 2021.02.26
[Java] 큐 Queue  (0) 2021.02.20
[Java] 해쉬맵 HashMap  (0) 2021.02.16

댓글