오늘은 List 인터페이스의 마지막! Vector에 대해서 알아보자.
Vector(벡터)는 컬렉션 프레임워크(Collection Framework) 의 존재 이전에 추가된 레거시 클래스 중 하나이다. 현재는 Generic을 지원할 수 있도록 재설계 되었다.
- 내부에 배열을 가지고 있으며, 순서대로 값들이 저장된다.
- Vector와 ArrayList는 유사한 클래스이며, 크기가 가변적으로 변한다.
- 동기화를 제공하기 때문에 멀티스레드 환경에서 안전(Thread Safe)하다.
- 하지만 동기화로 인해 ArrayList보다 낮은 성능을 가지고 있다. (따라서 동기화가 필요하지 않을 때는 ArrayList를 사용한다)
Vector 선언 방법
Vector<Integer> vector1 = new Vector<>();
Vector<Integer> vector2 = new Vector<Integer>(); // 타입 지정
Vector<Integer> vector3 = new Vector<>(10); // 초기 용량 세팅
Vector<Integer> vector4 = new Vector<>(10, 10); // 초기 용량, 증가량 세팅
Vector<Integer> vector5 = new Vector<>(vector2); // 다른 Collection값으로 초기화
Vector<Integer> vector6 = new Vector<>(Arrays.asList(1, 2, 3, 4, 5)); // 초기 값 세팅
Vector 값 추가 / 변경
add(Object): Vector 의 마지막에 데이터 추가
add(int index, Object): Vector 의 index 에 데이터 추가
set(int index, Object) 를 통해 값 변경
Vector<String> vector = new Vector<>();
vector.add("apple"); // 추가
vector.add("mango");
vector.add(0, "banana");
vector.add("kiwi");
// [banana, apple, mango, kiwi]
vector.set(0, "peach"); //수정
// [peach, apple, mango, kiwi]
Vector 값 삭제
remove(): 0 번째 index 제거
remove(int index): index에 해당하는 값 삭제
remove(Object): 해당 Object 와 같은 값 삭제
clear(): 데이터 모두 삭제
Vector<String> vector = new Vector<>(Arrays.asList("A", "B", "C", "D", "E"));
vector.remove(0); // "A"
// [B, C, D, E]
String removedData = vector.remove(0); // "B"
System.out.println("Removed data is " + removedColor); // Removed data is B
colors.remove("B"); // [C, D, E]
colors.clear(); // []
Vector 전체 값 출력
Vector<String> vector = new Vector<>(Arrays.asList("A", "B", "C", "D"));
// for-each loop
for (String alphabet : vector) {
System.out.print(alphabet + " ");
}
System.out.println(); // A B C D
// for loop
for (int i = 0; i < vector.size(); ++i) {
System.out.print(vector.get(i) + " ");
}
System.out.println(); // A B C D
// using iterator
Iterator<String> iterator = vector.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println(); // A B C D
// using listIterator
ListIterator<String> listIterator = vector.listIterator(list.size());
while (listIterator.hasPrevious()) {
System.out.print(listIterator.previous() + " ");
}
System.out.println(); // D C B A
// forEach()
vector.forEach(alphabet -> System.out.print(alphabet + " "));
Vector 값 존재 유무
contains(Object): 해당 Object 가 존재 여부를 boolean 타입으로 리턴한다.
indexOf(Object): 해당 Object의 존재 여부와 위치를 리턴한다 (존재하지 않을 시 -1 를 리턴).
Vector<String> list = new Vector<String>(Arrays.asList("A", "B", "C", "D"));
list.contains("A"); // true
list.contains("E"); // false
list.indexOf("A"); // 0
list.indexOf("E"); // -1 : 값이 없음
ArrayList 와 LinkedList와 굉장히 유사하다! 쓰이는 방법은 세 List 클래스 모두 비슷하다.
일단 ArrayList 와 Vector를 비교했을 때, 동기화가 필요한 상황이라면 Vector를, 그게 아니라면 ArrayList 를 쓰면 될 것 같다!
[참고]
'𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈 > 𝐽𝐴𝑉𝐴' 카테고리의 다른 글
[JAVA] Collection - Set (SortedSet, TreeSet) (0) | 2022.11.24 |
---|---|
[JAVA] Collection - Set (HashSet) (0) | 2022.11.23 |
[JAVA] Collection - List (LinkedList) (0) | 2022.11.21 |
[JAVA] Collection - List (ArrayList) (0) | 2022.11.21 |
[디자인패턴] 프록시(Proxy) 패턴 (0) | 2022.11.19 |