Vector란?
Vector는 ArrayList와 동일한 내부구조를 가지고 있다. ArrayList와 마찬가지로 Vector내부에 값이 추가되면 자동으로 크기가 조절되며 그다음 객체들은 한 자리씩 뒤로 이동된다.
하지만 Vector와 ArrayList의 한 가지 다른 점이 있는데 Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드들이 실행할 수 있다.
그래서 멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있다.
Vector의 단점 (ArrayList와 비교)
Vector는 항상 동기화된다는 장점이자 단점을 가지고 있다.
스레드가 1개일때도 동기화를 하기 때문에 ArrayList보다 성능이 떨어진다.
ArrayList는 기본적인 기능은 Vector와 동일하나 자동 동기화 기능이 빠져있고, 동기화 옵션이 존재한다.
그리고 Vector에 비해 속도가 더 빠르기 때문에 Vector에 비해 많이 쓰이고 있다.
Vector 사용법
Vector 선언
Vector v = new Vector();//타입 미설정 Object로 선언된다.
Vector<Student> student = new Vector<Student>(); //타입설정 Student객체만 사용가능
Vector<Integer> num2 = new Vector<Integer>(); //타입설정 int타입만 사용가능
Vector<Integer> num3 = new Vector<>(); //new에서 타입 파라미터 생략가능
Vector<String> v2 = new Vector<String>(10);//초기 용량(capacity)지정
Vector<Integer> v3 = new Vector<Integer>(Arrays.asList(1,2,3)); //초기값 지정
Vector 선언시 타입을 지정하지 않고 임의의 타입의 값을 넣고 사용할 수도 있지만 이렇게 사용할 경우 Vector 내부의 값을 사용하려면 캐스팅(Casting) 연산이 필요하며 잘못된 타입으로 캐스팅을 한 경우에는 에러가 발생하기에 Vector를 사용할때에는 타입을 명시해주는 것이 좋다. JDK 5.0 이후부터 자료형의 안정성을 위해 제너릭스(Generics)라는 개념이 도입되었다. Vector<Integer> v = new Vector<Integer>();이라고 되어있다면 int객체들만 add 될 수 있고 다른 타입의 객체는 사용이 불가능하다.
Vector 값 추가
Vector<Integer> v = new Vector<Integer>();
v.add(3); //값 추가
v.add(null); //null값도 add가능
v.add(1,10); //index 1뒤에 10 삽입
Vector v = new Vector();
Student student = new Student(name,age);
v.add(student);
v.add(new Member("홍길동",15));
Vector에 값을 추가하려면 Vector의 add(index, value) 메서드를 사용하면 된다. 구조는 ArrayList나 LinkedList와 같다. index를 생략하면 Vector의 맨 뒤에 값이 추가되며 index중간에 값을 추가하면 해당 인덱스부터 마지막 인덱스까지 모두 한 칸씩 뒤로 밀려난다.
Vector 값 삭제
Vector<Integer> v = new Vector<Integer>(Arrays.asList(1,2,3));
v.remove(1); //index 1 제거
v.removeAllElements(); //모든 값 제거
v.clear(); //모든 값 제거
Vector 크기 구하기
Vector<Integer> v = new Vector<Integer>(10);//초기용량 10
v.add(1); //값 추가
System.out.println(v.size()); //Vector 자료 개수 : 1
System.out.println(v.capacity()); //Vector 물리적크기
Vector의 값이 들어있는 개수를 구하려면 size() 메서드를 사용하면 되고 물리적 크기를 알고 싶다면 capacity() 메서드를 사용하면 된다.
Vector 값 출력
Vector<Integer> list = new Vector<Integer>(Arrays.asList(1,2,3));
System.out.println(list.get(0));//0번째 index 출력
for(Integer i : list) { //for문을 통한 전체출력
System.out.println(i);
}
Iterator iter = list.iterator(); //Iterator 선언
while(iter.hasNext()){//다음값이 있는지 체크
System.out.println(iter.next()); //값 출력
}
Vector에서 값을 출력하는 방법은 ArrayList와 동일하다. get(index) 메서드를 사용하면 Vector의 원하는 index의 값이 리턴된다. 전체 출력은 대부분 for문을 통해서 출력을 하고 Iterator를 사용해서 출력을 할 수도 있다.
Reference
'Algorithm & Data Structure > study' 카테고리의 다른 글
[Data Structure / Java] ✒️ Graph(그래프) (0) | 2022.08.16 |
---|---|
[Algorithm / Java] ✒️ Bubble Sort (거품 정렬) (0) | 2022.08.15 |
[Data Structure / Java] ✒️ Stack, Queue (0) | 2022.08.15 |
[Data Structure / Java] ✒️ Map (2) | 2022.08.12 |
[Data Structure / Java] ✒️ ArrayList와 LinkedList의 차이 (0) | 2022.08.08 |