벡터는 여러 오브젝트들의 집합이다.
배열과 동일하게 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배열에 벡터의 모든 값을 복사해 넣는다.
E elementAt (int index)
index 자리의 값을 반환한다.
Enumeration<E> elements ()
벡터의 모든 값들을 Enumeration 형태로 반환한다.
boolean equals (Object o)
o 값과 동일한 벡터인지 여부를 반환한다.
E firstElement ()
첫 번째 값을 반환한다. (index 0)
void forEach (Consumer<? super E> action)
모든 값을 반환하거나, 오류가 발생할 때까지 값들을 순차적으로 반환한다.
이 때 반환은 iterator를 이용해 이루어진다.
E get (int index)
index 자리의 값을 반환한다.
boolean isEmpty ()
벡터가 비었으면 true를 반환한다.
Iterator<E> iterator ()
벡터의 모든 값들에 대한 Iterator를 반환한다.
E lastElement ()
벡터의 마지막 값을 반환한다.
int lastIndexOf (Object o)
벡터가 가진 o 값들 중 마지막 값의 index를 반환한다.
만약 값이 존재하지 않으면 -1을 반환한다.
E 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 |
댓글