[Java] 자바 Vector 사용법 & 예제 총정리

    Vector란?

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

     

     

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

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

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

    [Java] 래퍼 클래스(Wrapper Class)란 무엇인가? (박싱, 언박싱)

     

    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의 remove(index) 메소드를 사용하면 됩니다. remove() 함수를 사용하여 특정 인덱스의 값을 제거하면 바로 뒤에 있는 인덱스부터 마지막 인덱스까지 모두 앞으로 한 칸씩 앞으로 당겨집니다. 모든 값을 제거하려면 clear() 메소드나 removeAllElements() 메소드를 사용하면 됩니다.

     

    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의 값이 들어있는 개수를 구하려면 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를 사용해서 출력을 할 수도 있습니다.

     

    참고자료

    댓글(6)

    Designed by JB FACTORY