java/개념

Vector<E>

unhyepnhj 2024. 6. 8. 17:03

Vector<E>의 특성

 

java.util.Vector

- <E>에서 E 대신 요소로 사용할 특정 타입을 지정하여 구체화

 

여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스

- 배열을 가변 크기로 다룰 수 있게 함 → 배열의 길이 제한 극복

- 원소의 개수에 따라 자동으로 크기 조절

 

Vector에 삽입 가능한 것

- 객체

- null

- 기본 타입은 Wrapper 객체로 저장

 

Vector에 객체 삽입

- 벡터의 맨 뒤에 객체 추가

- 벡터 중간에 객체 삽입

 

Vector에서 객체 삭제

- 임의의 위치에 있는 객체 삭제 가능

- 객체 삭제 후 자동으로 자리 이동 


벡터 생성

Vector<Integer> v = new Vector<Integer>();

- Vector<E>의 E에 요소로 사용할 타입을 지정(위 경우는 Integer 타입)

- int, double, char 등의 기본 타입은 E에 사용 불가

Vector<Integer> v = new Vector<Integer>(); 벡터 생성

Vector<String> stringVector;		//변수 선언
stringVector = new Vector<String>();	//문자열 벡터 생성

- 레퍼런스 변수 선언과 벡터 생성 분리 가능

 

- E에 타입을 지정하지 않고 Vector로만 사용하면 경고 메시지 출력

- 컬렉션은 자신의 용량을 스스로 조절하므로 개발자는 벡터의 용량을 굳이 알 필요 없음

Vector<Integer> v = new Vector<Integer>(5);	//초기 용량이 5인 벡터 생성

- 용량을 설정하고자 한다면 생성자에 용량 지정

벡터 생성자

Vector<E> 클래스 주요 메소드


벡터에 요소 삽입

 

add() 메소드를 이용해 벡터의 끝에 요소 삽입

Vector<Integer> v = new Vector<Integer>();
//5, 4, -1을 순서대로 벡터의 맨 뒤에 삽입
v.add(Integer.valueOf(5));
v.add(Integer.valueOf(4));
v.add(Integer.valueOf(-1));

-정수를 Integer 객체로 만들어 삽입

v.add(5);	//5 -> new Integer(5)로 자동 박싱
v.add(4);
v.add(-1);

- 자동 박싱 기능을 활용하면 위와 같이 표현해도 무방 

v.add("hello");		//컴파일 오류
v.add(3.5);		//컴파일 오류
v.add(new Person());	//컴파일 오류
v.add(null);		//벡터에 null 삽입 가능

- v의 요소에 Integer 타입이 지정되었으므로 다른 타입의 요소 삽입 불가

 

add(int i, E element) 메소드를 사용해 벡터의 중간에 객체 삽입

v.add(2, 100);
//인덱스 2의 위치에 100 삽입

- 인덱스 2에 100을 삽입하고

- 기존 인덱스 2에 들어 있던 요소와 그 뒤의 요소들을 모두 한 자리씩 뒤로 이동

- 벡터에 1개의 요소(인덱스 0)만 들어 있는 상태라면 인덱스 1이 빈 공간이 되므로 예외 발생


벡터 내의 요소 알아내기

- get()이나 elementAt() 메소드

Vector<Integer> v = new Vector<Integer>();
v.add(5);
v.add(4);
v.add(-1);
Integer obj = v.get(1);		//벡터의 1번째 Integer 객체를 알아냄
int i = obj.intValue();		//obj에 있는 정수를 알아냄 >> 4
int i = v.get(1);		//자동 언박싱

- get(), elementAt() 메소드는 인자로 주어진 인덱스에 있는 Integer 객체를 리턴

- 자동 언박싱되므로 한 문장으로 표시 가능(line 3)

- 자동 언박싱에 의해 v.get(1)이 리턴하는 Integer 객체의 정수 값(4)이 변수 i에 저장


벡터의 크기와 용량 알아내기

 

벡터의 크기

- 벡터에 들어 있는 요소의 개수

- size() 메소드 사용

int len = v.size();

 

벡터의 용량

- 벡터가 수용할 수 있는 크기

- capacity() 메소드

int cap = v.capacity();

벡터에서 요소 삭제

- remove() 메소드

- removeAllElements() 메소드

v.remove(1);	//인덱스 1 위치의 요소 삭제

- 실행 결과 뒤에 있는 요소들이 한 자리씩 앞으로 이동

Integer m = Integer.valueOf(100);	//객체 레퍼런스 m
v.add(m);
...
v.remove(m);	//레퍼런스 m의 요소 삭제

- 객체 레퍼런스로 remove() 호출 가능

v.removeAllElements();

- 벡터의 모든 요소 삭제


컬렉션과 자동 박싱/언박싱

- 컬렉션의 요소로는 객체만 가능하므로 기본 타입의 값은 Wrapper 클래스로 객체화하여 삽입

- 컬렉션으로부터 값을 얻어낼 때는 자동 언박싱 발생

Vector<Integer> v = new Vector<Integer>();
v.add(Integer.valueOf(4));
v.add(Integer.valueof(-1));

- 정수를 Integer 객체로 만들어 저장

v.add(4);	//정수 4가 Integer(4)로 자동 박싱
v.add(-1);	//정수 -1이 Integer(-1)로 자동 박싱

- int 타입 값을 사용하면 자동 박싱에 의해 Integer 객체로 변환되어 삽입

//자동 언박싱
int k = v.get(0);	//k=4

- 자동 언박싱을 활용하여 벡터로부터 정수 값을 바로 얻어냄


 

컬렉션을 매개변수로 받는 메소드 만들기

public void printVector(Vector<Integer> v){
	for(int i=0; i<v.size; i++){
    	int n = v.get(i);
        System.out.println(n);
    }
}

- Integer 벡터를 매개변수로 받아 원소를 모두 출력하는 printVector() 메소드 작성

Vector<Integer> v = new Vector<Integer>();
printVector(v);	//메소드 호출

- printVector() 메소드 호출


자바 타입 추론 기능의 진화

 

Java 7 이전

Vector<Integer> v = new Vector<Integer>();

 

Java 7 이후

- 컴파일러의 타입 추론 기능 추가

Vectoer<Integer> v = new Vector<>();	//<>안에 값 생략

- <> 연산자에 타입 매개변수를 생략하면 컴파일러가 추론하여 찾아 줌

 

Java 10 이후

- var 키워드 도입

- 컴파일러의 지역 변수 타입 추론 가능

var v = new Vector<Integer>();

예제 7-1 정수만 다루는 벡터를 생성하고 활용하는 기본 사례

import java.util.Vector;

public class VectorEx {
	public static void main(String[] args) {
		Vector<Integer> v=new Vector<Integer>();	//정수만 다루는 벡터 생성
		v.add(5);	//인덱스 0에 5
		v.add(4);	//인덱스 1에 4
		v.add(-1);	//인덱스 2에 -1
		v.add(2, 100);	//인덱스 2에 100이 삽입되고 -1은 인덱스 3으로 밀림
		
		System.out.println("벡터 내 요소 수: "+v.size());	//벡터 크기
		System.out.println("현재 벡터 용량: "+v.capacity());	//벡터 용량
		
		for(int i=0; i<v.size(); i++) {
			System.out.print(v.get(i)+" ");	//벡터 내 i번째 정수 출력
		}//모든 요소 출력
		System.out.println();
		
		int sum=0;
		for(int i=0; i<v.size(); i++) {
			sum+=v.elementAt(i);
		}
		System.out.println("벡터 내 모든 정수 합: "+sum);
	}
}

 

예제 7-2 점 (x, y)를 표현하는 Point 클래스를 만들고 Point 객체만 다루는 Vector 작성