[JAVA] Vector 클래스 정리

2019. 10. 1. 13:53 JAVA/Java

Vector 클래스 정리


자바의 배열은 고정 길이를 사용한다. 즉, 배열이 한 번 생성되면 배열의 길이를 증가하거나 감소할 수 없다.


[JAVA/Java] - [JAVA] Array 배열, 이중 배열, 다중 배열



사용자가 배열을 사용할 때 배열의 크기를 벗어나는 인덱스에 접근하면 java.lang.ArrayIndexOutOfBoundsException이 발생한다. 그러므로 배열을 사용할 때는 충분한 크기로 설정해야 한다. 그러나 사용할 배열의 크기를 미리 예측하는 것은 쉬운 일이 아니다. 자바에서는 동적인 길이로 여러 데이터형을 저장하기 위해 Vector 클래스를 제공한다.

Vector 클래스는 가변 길이의 배열이라고 할 수 있다.


즉, Vector 클래스는 객체에 대한 참조값을 저장하는 배열이므로 다양한 객체들이 하나의 Vector에 저장될 수 있고 길이도 필요에 따라 증감할 수 있다는 점이 배열과 다른 점이다.


* Vector 클래스의 생성자


Vector 클래스의 생성자 

 설명

 Vector()

 10개의 데이터를 저장할 수 있는 길이의 객체를 생성한다. 

 저장 공간이 부족한 경우 10개씩 증가한다. 

 Vector(int size) 

 size 개의 데이터를 저장할 수 있는 길이의 객체를 생성한다. 

 저장공간이 부족할 경우 size개씩 증가한다. 

 Vector(int size, int incr) 

 size 개의 데이터를 저장할 수 있는 길이의 객체를 생성한다. 

 저장 공간이 부족한 경우 incr 개씩 증가한다.


* Vector 클래스의 주요 메소드


Vector 클래스의 메소드 

 설명

void add(int index, Object element) 

Vector 내의 index 위치에 element 객체를 저장한다. 

boolean add(Object o) 

o 객체를 Vector 내에 저장하고 그 결과 여부를 true, false로 반환한다. 

void addElement(Object obj) 

obj 객체를 Vector에 저장한다. 

int capacity() 

Vector의 용량을 반환한다. 

boolean contains(Object elem) 

현재 Vector에 elem의 요소가 있는지 검사하여, 있으면 true, 아니면 false를 반환한다. 

void copyInto(Object[] anArray) 

Vector 내용을 Object 배열로 복사한다. 

Object elementAt(int index) 

index 위치의 객체를 반환한다. 

Enumeration elements() 

이 Vector의 Enumeration을 생성한다. 

boolean equals(Object o) 

Vector의 내용이 같은지 비교한다. 

Object firstElement() 

Vector의 첫 번째 요소를 Object 형태로 반환한다. 

Object get(int index) 

Vector의 index 번째 요소를 Object 형태로 반환한다. 

int indexOf(Object elem) 

elem 객체의 위치를 반환한다. 

int indexOf(Object elem, int index) 

index 위치로부터 elem 객체의 위치를 반환한다. 

void insertElementAt(Object obj, int index) 

index 위치에 obj를 삽입한다. 

boolean isEmpty() 

Vector가 비어 있는지 체크하여 true, false로 반환한다. 

Object lastElement() 

Vector의 마지막 요소를 Object 형태로 반환한다. 

int lastIndexOf(Object elem) 

elem 객체의 마지막 위치로 반환한다. 

int lastIndexOf(Object elem, int index) 

index로부터 시작하여 elem객체의 마지막 위치로 반환한다. 

Object remove(int index) 

index 위치의 객체를 Vector에서 제거한다. 

boolean remove(Object o) 

o 객체를 찾아서 Vector에서 제거한다. 

void removeAllElements() 

Vector의 모든 요소를 제거한다. 

boolean removeElement(Object obj) 

obj 객체를 Vector에서 제거하고 그 결과를 true, false로 반환한다. 

void removeElementAt(int index) 

index 위치의 요소를 제거한다. 

protected void removeRange(int fromIndex, int toIndex) 

fromIndex 위치에서부터 toIndex 위치까지의 Vector의 일부 객체에 요소를 제거한다. 

Object set(int index, Object element) 

index 위치에 element 객체로 설정하고, 설정 후에는 설정된 객체를 반환한다. 

void setElementAt(Object obj, int index) 

index 위치에 element 객체로 설정한다. 

void setSize(int newSize) 

Vector의 size를 새로 설정한다. 

int size() 

Vector의 현재 size를 반환한다. 

Object[] toArray() 

Vector를 Object 배열로 생성하여 반환한다. 



* Vector 클래스 사용


Vector는 서로 다른 타입을 가지는 참조형 데이터를 저장하는 가변 길이의 배열이다. Vector에는 기본형 데이터를 저장할 수 없다. 정수나 실수 형태 같은 기본 데이터형을 저장하기 위해서는 기본형 데이터를 Wrapper 클래스 타입의 객체로 생성해야 한다.


[JAVA/Java] - [JAVA] Wrapper class 란? 그리고 AutoBoxing



public class VectorTest{
   
    public static void main(String[] args) {
       
        Vector<String> vector = new Vector<String>(3);
       
        System.out.println("vector의 크기 : "+ vector.size());
        System.out.println("vector의 용량 : "+ vector.capacity());
       
        vector.addElement("하이언");
        vector.addElement("아이유");
        vector.addElement("버스커");
        vector.addElement("소녀시대");
       
        System.out.println("데이터 삽입 후 vector의 크기 : "+ vector.size());
        System.out.println("데이터 삽입 후 vector의 용량 : "+ vector.capacity());
       
        System.out.println("vector의 첫번째 요소 : "+vector.elementAt(0));
       
        vector.removeAllElements();
       
        System.out.println("데이터 삭제 후 vector의 크기 : "+ vector.size());
        System.out.println("데이터 삭제 후 vector의 용량 : "+ vector.capacity());
    }
}



- 첫 줄을 보면 new Vector<String>(3)  으로 Vector 객체를 생성하였다.

- 이것은 Vector 객체에 String 객체를 담을 수 있으며, 용량은 3 이며, size가 용량을 초과했을 때, 3의 크기만큼 용량이 증가한다. (매개변수를 지정하지 않으면 기본 용량 10, 증가 용량 10이다.)

- vector.addElement() 로 String 객체를 4개 대입하고 , size와 용량을 확인하니, size=4, capacity=6 이다.

- 이것은 기본 용량 3에서 3보다 많은 객체가 대입되어, 용량이 3만큼 동적으로 증가한 것이다.

- removeAllElements()로 요소들을 전체 삭제 후, size 와 용량을 확인 하면, size는 0 이며, 용량은 그대로 6이다.



* Vector 클래스의 확장


위에서 Vector 클래스를 보면 생성시의 Vector<String> 으로 Vector 객체에 담을 수 있는 객체형을 한정짓는다.

다양한 종류의 객체를 담고 싶으면 Vector 클래스를 확장한 클래스를 생성하여, 사용하면 된다.


 

public class VectorTest extends Vector{
   
    public VectorTest(int i){
        super(i);
    }
   
    public static void main(String[] args) {
       
        VectorTest v1 = new VectorTest(2);
       
        System.out.println("v1의 용량은 "+v1.capacity());
       
        System.out.println("증가치는 "+v1.capacityIncrement);
        System.out.println("현재 요소의 수는 "+v1.elementCount);
       
        v1.addElement(new Integer(10));
        v1.addElement(new Double(10.0));
        v1.addElement(new String("안녕"));
       
        System.out.println("3개의 요소 삽입 후 현재 요소의 수 : "+v1.elementCount);
       
        if(v1.contains("안녕")){
            System.out.println("안녕 문자열은 "+v1.indexOf("안녕")+"번째 인덱스에 있다.");
        }
       
        System.out.println("1번째 인덱스의 요소는 "+ v1.elementAt(1));
    }

}




- VectorTest 클래스는 Vector를 확장하였고, 생성자에서 받은 매개변수로 VectorTest의 용량을 설정한다.

- VectorTest는 Integer, Double, String 등 다양한 객체를 참조할 수 있다.


JAVA API DOC : java.util.Vector



출처: https://hyeonstorage.tistory.com/208?category=557602 [개발이 하고 싶어요]