슬기로운 개발생활

[Java] Vector

by coco3o
반응형

Vector란?

Vector는 ArrayList와 동일한 내부구조를 가지고 있다. ArrayList와 마찬가지로 Vector내부에 값이 추가되면 자동으로 크기가 조절되며 그 다음 객체들은 한 자리씩 뒤로 이동된다.
하지만 Vector와 ArrayList의 한 가지 다른 점이 있는데 Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드들이 실행할 수 있다.
그래서 멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있다.

출처 : https://coding-factory.tistory.com/553?category=758267


Vector의 단점 (ArrayList와의 비교)

벡터는 항상 동기화되는 장점이자 단점을 가지고 있다. 스레드가 1개일때도 동기화를 하기 때문에 ArrayList보다 성능이 떨어진다.

ArrayList는 기본적인 기능은 벡터와 동일하나 자동 동기화 기능이 빠져있고, 동기화 옵션이 존재한다.
그리고 벡터에 비해 속도가 더 빠르기 때문에 벡터에 비해 많이 쓰이고 있다.


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)); //초기값 지정

출처 :&nbsp;https://coding-factory.tistory.com/553?category=758267

Vector 선언시 타입을 지정하지 않고 임의의 타입의 값을 넣고 사용할 수도 있지만 이렇게 사용할 경우 벡터 내부의 값을 사용하려면 캐스팅(Casting) 연산이 필요하며 잘못된 타입으로 캐스팅을 한 경우에는 에러가 발생하기에 Vector를 사용할때에는 타입을 명시해주는 것이 좋다.
JDK 5.0 이후부터 자료형의 안정성을 위해 제네릭스(Generics)라는 개념이 도입되었고
Vector<Integer> v = new Vector<Integer>();라고 되어있다면 int 객체만 add될 수 있고 다른 타입의 객체는 사용이 불가능하다.

제네릭스? 선언할 수 있는 타입이 객체 타입이다. int는 기본 자료형이기 때문에 들어갈 수 없으므로 int를 객체화시킨 wrapper클래스를 사용해야 한다.

[Java] Wrapper클래스란?

 

[Java] Wrapper클래스란?

래퍼 클래스란(Wrapper Class)? 자바의 자료형은 크게 기본 타입(primitive type)과 참조타입(reference type)으로 나누어진다. 대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은..

dev-coco.tistory.com


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));

출처 :&nbsp;https://coding-factory.tistory.com/553?category=758267

 

Vector 값 삭제

Vector<Integer> v = new Vector<Integer>(Arrays.asList(1,2,3));
v.remove(1);  //index 1 제거
v.removeAllElements(); //모든 값 제거
v.clear();  //모든 값 제거

출처 :&nbsp;https://coding-factory.tistory.com/553?category=758267

 

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 물리적크기 : 10

 

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()); //값 출력
}


References : 이것이 자바다 15장 컬렉션 프레임워크
coding-factory.tistory.com/553?category=758267

반응형

'📚Computer Science > Data structure' 카테고리의 다른 글

[Java] TreeSet  (0) 2021.05.11
[Java] HashSet  (0) 2021.05.11
[Java] LinkedList  (0) 2021.05.10
[Java] ArrayList  (0) 2021.05.10
ArrayList와 LinkedList의 차이  (0) 2021.01.14

블로그의 정보

슬기로운 개발생활

coco3o

활동하기