[Java] 벡터(Vector) 객체를 배열(Array)로 변환하는 방법과 Vector 사용법 예제 총정리: copyInto()
벡터 클래스는 초장기 자바에서 제공했던 레거시 클래스입니다. 레거시 클래스란 Collection 개념이 없던 초창기 자바 버전에서 정의한 인터페이스로, 지금도 여전히 사용되고 있습니다. Vector 클래스는 List인터페이스를 구현한 클래스입니다. 벡터는 ArrayLIst와 동일한 내부구조를 가지고 있는데, Vector를 배열로 변환 할 때 요소의 순서, 즉 삽입 된 순서가 동일하게 유지됩니다. Vector(벡터)는 항상 동기화되기 때문에 ArrayList보다 성능이 떨어집니다. 그러나 이런 동기화 덕분에 한번에 하나의 스레드만 접근할 수 있음으로 안전(Thread Safe)합니다. 멀티스레드 환경이 라면 반드시 Vector를 사용하는 것을 권장합니다. 멀티스레드 환경이 아닌 경우 ArrayList를 사용하는 것이 바람직하지요.
Java 개발자의 경우 작업에 적합한 Collection클래스를 선택할 수 있기 때문에 다양한 Collection 클래스에 대한 지식이 매우 중요합니다. 그럼 벡터(Vector) 사용법을 알아볼까요?
Vector 선언방법 예시
Vector<String> vectorWeather = new Vector<>();
Vector<Integer> vector1 = new Vector<>();
Vector<Integer> vector2 = new Vector<Integer>();
//벡터 초기값 지정 방법
Vector<Integer> vector3 = new Vector<Integer>(Arrays.asList(1,2,3));
//벡터 사이즈 지정방법
Vector<String> vector4 = new Vector<>(10);
//벡터 초기 용량을 10으로 지정, 추가한 데이터가 10개를 넘어가면 3개씩 증가시킴
Vector<String> vectorWeather = new Vector<String>(10,3);
Vector<Car> vectorCar = new Vecotr<Car>();
Vector 값 추가 하는 방법
Vector에 값을 추가시 Vector의 add(index, value) 메서드를 사용합니다.
Vector<Integer> vector1 = new Vector<>();
vector1.add(1);
vector1.add(null);
vector1.add(5, 10);
Vector<String> vectorWeather = new Vector<>();
vectorWeather.add("Rain");
vectorWeather.add("Sunshine");
vectorWeather.add("Fog");
vectorWeather.add("Cloud");
Vector 값 삭제하는 방법
Vector<Integer> vector3 = new Vector<Integer>(Arrays.asList(1,2,3));
vector3.remove(0); //첫번째 인텍스에 있는 값을 제거
vector3.removeAllElements();//모든 값 제거
vector3.clear();//모든 값 제거
Vector 크기 알아보는 방법
벡터에 추가한 값의 개수를 알아보기 위해 size()메서드를 사용합니다. 크기를 알아보기위해서는 capacity() 메서드를 사용합니다.
Vector<Integer> vector4 = new Vector<Integer>(5);//초기 크기 5
vector4.add(1);
//Vector의 데이터 개수
System.out.println(vector4.size());
//Vector의 크기 : 5
System.out.println(vector4.capacity());
Vector 값 출력하는 방법
get(index) 메서드를 사용하여 출력합니다. Vector의 전체 값을 출력은 for문 또는 Iterator를 사용해서 출력할 수 있습니다.
package edu.sample;
import java.util.Iterator;
import java.util.Vector;
public class Tutorial {
public static void main(String[] args) {
Vector<String> vectorWeather = new Vector<>();
vectorWeather.add("Rain");
vectorWeather.add("Sunshine");
vectorWeather.add("Fog");
vectorWeather.add("Cloud");
System.out.println("Vector 출력 : " + vectorWeather);
System.out.println("Vector 첫번째 index의 객체 출력 : " + vectorWeather.get(0));
for(String str : vectorWeather) { //for문을 사용하여 전체값 출력
System.out.println(str);
}
Iterator iter = vectorWeather.iterator(); //Iterator 선언
while(iter.hasNext()){//다음값이 있는지 체크
System.out.println(iter.next()); //값 출력
}
}
}
다음은 Vector를 Java의 배열로 변환하는 샘플 예제 코드 입니다. Vector의 문자열을 문자열 배열로 변환합니다.
package edu.sample;
import java.util.Arrays;
import java.util.Vector;
public class Tutorial {
public static void main(String[] args) {
Vector<String> vectorWeather = new Vector<>();
vectorWeather.add("Rain");
vectorWeather.add("Sunshine");
vectorWeather.add("Fog");
vectorWeather.add("Cloud");
System.out.println("Vector 출력 : " + vectorWeather);
System.out.println("Vector 첫번째 객체 출력 : " + vectorWeather.get(0));
String[] arrayWeather = vectorWeather.toArray(new String[vectorWeather.size()]);
System.out.println("문자열로 array 출력: " + Arrays.toString(arrayWeather));
}
}
[샘플 예제코드 실행 결과]
Vector 출력 : [Rain, Sunshine, Fog, Cloud]
Vector 첫번째 객체 출력 : Rain
문자열로 array 출력: [Rain, Sunshine, Fog, Cloud]
Vector는 삽입 순서, 즉 요소가 삽입되는 순서를 보장 하는 List 인터페이스를 구현하기 때문에 요소의 순서가 유지 됩니다. 만약 Car라는 객체 클래스를 담은 Vector를 배열로 변환하려면? copyInto()메서드를 사용합니다.
package edu.sample;
import java.util.Vector;
class Car {
private String name;
private int year;
public Car(String name, int year){
this.name = name;
this.year= year;
}
public String getName(){
return name;
}
public int getYear(){
return year;
}
}
public class Tutorial {
public static void main(String[] args) {
Vector<Car> vectorCar = new Vector<Car>();
Car car1 = new Car("K7", 2020);
Car car2= new Car("K8", 2021);
vectorCar.add(car1);
vectorCar.add(car2);
//배열 객체 선언 및 사이트 할당
Car[] arrCar = new Car[vectorCar.size()];
//copyInto()메서드 사용
vectorCar.copyInto(arrCar);
for(Car car: arrCar) {
System.out.println("차종:" + car.getName() + " 연식:"+ car.getYear());
}
}
}
[출력결과]
차종:K7 연식:2020
차종:K8 연식:2021
끝!!