Vector보단 ArrayList를 더 많이쓰지만 사용법은 숙지해놔야하기 때문에 복습해본다.
Vector
ArrayList와 동일한 구조를 가지며 배열의 크기가 늘어나고, 줄어듬에 따라서 자동으로 크기가 조절이 된다.
Vector 생성
Vector v1 = new Vector();
제네릭 타입 지정안해서 여러 타입의 데이터 저장가능 but!
저장될때 타입은 Object타입으로 저장되어서 get으로 꺼낼때 형변환해야함. 형변환이 귀찮으면 생성시 아래와 같이 제네릭타입을 지정해주면 됨.
Vector<String> v2 = new Vector<>();
제네릭 타입(Generic Type)
클래스 내부에서 사용할 데이터의 타입을 외부에서 지정하는 기법
객체를 선언할 때 <> 안에 그 객체가 사용할 데이터의 타입을 정해준다. 이런식으로 선언하게 되면 그 데이터 타입 이외의
데이터를 저장할 수 없다. 단, 제네릭으로 선언될 수 있는 데이터 타입은 클래스형이어야 한다.
예) int ==> Integer
boolean => Boolean
char ==> Character 등으로 대체해서 사용해야한다.
제네릭 타입으로 선언하게 되면 데이터를 꺼내올 때 별도의 형변환이 필요없다.
Vector 데이터 추가
- add(추가할데이터) . 반환값은 추가성공시true,실패시 false
- addElement(추가할 데이터) 반환값없음.
- add(index, 데이터) -> index번째에 '데이터'를 끼워 넣는다. 반환값 없음.
데이터 추가1 : add(추가할 테이터 지정)
반환값: 추가 성공시 true, 실패시 false
v1.add("AAAA"); // 문자열데이터 AAAA객체
v1.add(new Integer(123)); //숫자데이터는 객체화해서 넣어야함.
v1.add(111); //객체화안해도되게 개선됨. 그냥 일반데이터 넣어도
내부에서 자동으로 객체화해서 넣어줌 (=auto boxing)
v1.add('a'); //문자데이터
v1.add(true);
boolean r = v1.add(3.14); //3.14가 들어간것이 성공했는지
v2.add("String1");
v2.add("String2");
데이터 추가2: addElement(추가할 데이터)
이전 버전의 Vector에서 사용하던 메서드
v1.addElement("KKK");
데이터 추가3: add(index, 데이터) -> index번째에 '데이터'를 끼워 넣는다. 반환값은 없다.
v1.add(1, "ZZZ"); //1번째 자리에 ZZZ를 추가 .
원래 1번 인덱스에 있던 데이터는 뒤로 밀려남
Vector 데이터 수정
- set(index, 새로운 데이터)
'index'번째 자료를 '새로운데이터'로 변경한다
반환값 : 원래의 데이터
String temp = (String)v1.set(0, "YYYY");
// v1객체는 제네릭타입이 없으므로 String으로 형변환 해줘야함.
String temp2 = v2.set(0,"YYYY");
// v2객체는 제네릭타입이 String이므로 형변환 불필요
temp와 temp값에는 YYYY값으로 수정되기 전의 값이 반환됨
Vector 데이터 삭제
- remove(index)
'index'번째의 데이터를 삭제한다.
반환값 : 삭제된 데이터- remove(삭제할 데이터)
'삭제할 데이터'가 여러개면 앞에서부터 삭제된다.
반환값 : 삭제 성공이면 true, 실패면 false
제네릭 타입이 지정되지 않은 vector의 '삭제할 데이터'가 '정수형'이거나 'char형'이면 '삭제할 데이터'를 객체로 변환해서 사용해야 한다.- clear(); 전체데이터 삭제
- removeAll(Collection 객체)
'Collection 객체'가 가지고 있는 데이터를 모두 삭제한다.
반환값 : 성공(true), 실패(false)
v1.remove("KKK");
v1.remove(111); 삭제 안됨. 111을 인덱스로 인식.
때문에 111을 객체화 시켜야함
v1.remove(new Integer(111));
v1.remove('a'); ''로 감싼 값은 문자의 코드값으로 바뀌어 처리가됨.
소문자 a의 코드값은 97. 97번째 인덱스로 인식해서 삭제안됨
v1.remove(new Character('a')); 역시, 객체화 시켜야함
v2.remove("YYYY");
v1.removeAll(v2); v1중에 v2가 가지고 있는 것을 지우는 것
Vector 데이터 꺼내오기
- get(index)
index번째의 데이터를 반환한다.
int data = (int)v1.get(0);
제네릭이 지정되지 않은 벡터에는 object형으로 저장되어있기 때문에
무조건 다 형변환 해줘야함
String data2 = v2.get(0);
제네릭이 지정된 벡터는 형변환 불필요
Vector의 데이터를 처음부터 차례로 읽어와 처리하고 싶으면
반복문을 사용하면 된다.
for(int i=0; i<v2.size(); i++){
System.out.println(i+"번째 자료:"+ v2.get(i));
}
향상된 for문
for(String s : v2){
//v2의 개수만큼 반복되고 반복할때마다 v2에서 데이터를 하나
꺼내서 s에 저장하고 실행 반복
System.out.println(s);
}