ArrayList와 동일한 내부구조를 가지고 있으며, 값이 추가되면 자동으로 크기가 조절된다. 하지만 Vector는 동기화된 메서드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행 완료해야만 다른 스레드들이 실행할 수 있다.
멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있다.
Vector v1 = new Vector();
//객체생성
//예전방식 : 모든 데이터를 저장할 수 있지만 꺼내올 때는 형변환 필요
System.out.println("처음 크기 : " + v1.size()); // 0
→ 반환값 : 추가 성공(true), 실패(false)
v1.add("aaaa");
v1.add(new Integer(111));
v1.add(123);
오토박싱(기본자료형 → 랩퍼클래스형으로 자동변환)
오토언박싱(랩퍼클래스형 → 기본자료형으로 자동변환)
v1.add('a'); //' '로 저장되는 데이터는 문자가 아닌 코드값으로 저장
v1.add(true);
boolean chk = v1.add(3.14);
System.out.println("현재크기 : " + v1.size()); // 6
System.out.println("반환값 : " + chk); // true
→ add와 똑같은 기능을 하는 메서드(이전 버전의 프로그램에서도 사용 가능하도록 하기위해 남아 있는 메서드)
v1.addElement("CCC");
System.out.println("v1 ==> " + v1.toString());
System.out.println("v1 ==> " + v1); //toString() 생략
//v1 ==> [aaaa, 111, 123, a, true, 3.14, CCC]
//v1 ==> [aaaa, 111, 123, a, true, 3.14, CCC]
→ index번째에 '추가할 데이터'를 끼워 넣는다.( index는 0부터 시작한다.)
→ 반환값은 없다.
v1.add(1, "kkk");
System.out.println("v1 ==> " + v1);
//v1 ==> [aaaa, kkk, 111, 123, a, true, 3.14, CCC]
→ index번째의 데이터를 '새로운 데이터'로 덮어쓴다.
→ 반환값 : 원래의 데이터
String temp = (String)v1.set(1, "zzz");
System.out.println("v1 ==> " + v1);
System.out.println("반환값 : " + temp);
//v1 ==> [aaaa, zzz, 111, 123, a, true, 3.14, CCC]
//반환값 : kkk
→ index번째의 데이터를 반환한다.
int data = (int)v1.get(2);
System.out.println("2번째 자료 : " + data);
//2번째 자료 : 111
→ index번째의 데이터를 삭제한다.
→ 반환값 : 삭제된 데이터
v1.remove(0);
System.out.println("v1 ==> " + v1);
temp = (String)v1.remove(0);
System.out.println("v1 ==> " + v1);
System.out.println("삭제된 데이터 : " + temp);
//v1 ==> [zzz, 111, 123, a, true, 3.14, CCC]
//v1 ==> [111, 123, a, true, 3.14, CCC]
//삭제된 데이터 : zzz
→ '삭제할 데이터'를 찾아서 삭제한다.
→ '삭제할 데이터'가 여러개이면 앞에서부터 삭제된다.
→ 반환값 : 삭제 성공(true), 삭제 실패(false)
→ 삭제할 데이터가 '정수형'이거나 'char형'일 경우에는 반드시 객체로 변환해서 지정해 주어야 한다.
v1.remove("CCC");
System.out.println("삭제 후 v1 = " + v1);
// 삭제 후 v1 = [111, 123, a, true, 3.14]
//v1.remove(123);
//데이터 123을 삭제하는 것이 아니라 123번째 자료를 삭제하는 것으로 해석하여 컴파일 에러발생
v1.remove(new Integer(123);
System.out.println("삭제 후 v1 = " + v1);
//삭제 후 v1 = [111, a, true, 3.14]
//v1.remove('a'); 객체변환 필요
v1.remove(new Character('a'));
System.out.println("삭제 후 v1 = " + v1);
//삭제 후 v1 = [111, true, 3.14]
v1.remove(true);
v1.remove(3.14);
System.out.println("삭제 후 v1 = " + v1);
//삭제 후 v1 = [111]
Vector<String> v2 = new Vector<>();
Vector<String> v22 = new Vector<>();
Vector<Integer> v3 = new Vector<>();
//Vector<int> v33 = new Vector<>();
//제네릭 타입은 반드시 '클래스형'으로 지정해야 한다.
v22.add("안녕하세요");
//v22.add(123); //에러 : 다른 종류의 데이터를 저장할 수 없다.
String temp2 = v22.get(0);
System.out.println("temp2 = " + temp2);
//temp2 = 안녕하세요
v1.clear();
System.out.println("v1의 개수 : " + v1.size());
//v1의 개수 : 0
→ 'Collection 객체'가 가지고 있는 데이터를 모두 삭제한다.
→ 반환값 : 삭제 성공(true), 삭제 실패(false)
v2.add("AAAA");
v2.add("BBBB");
v2.add("CCCC");
v2.add("DDDD");
v2.add("EEEE");
Vector<String> v4 = new Vector<>();
v4.add("BBBB");
v4.add("EEEE");
System.out.println("v2 = " + v2);
System.out.println("v4 = " + v4);
//v2 = [AAAA, BBBB, CCCC, DDDD, EEEE]
//v4 = [BBBB, EEEE]
v2.removeAll(v4);
System.out.println("v2 = " + v2);
//v2 = [AAAA, CCCC, DDDD]
//현재 v2 = [AAAA, BBBB, CCCC, DDDD, EEEE]
for(int i = 0; i < v2.size(); i++){
System.our.println(i + "번째 자료 : " + v2.get(i));
}
//0번째 자료 : AAAA
//1번째 자료 : BBBB
//2번째 자료 : CCCC
//3번째 자료 : DDDD
//4번째 자료 : EEEE
향상된 for문
for(String str : v2){
System.out.pritnln(str);
}
//AAAA
//BBBB
//CCCC
//DDDD
//EEEE
→ 제네릭 타입은 코딩 작성 과정에서 그 오류를 해결할 수 있다.
Vector<Vector> vv = new Vector<>();
Vector<Vector<Vector>> vvv = new Vector<>();