[Java] Vector 사용법

고동이의 IT·2021년 10월 31일
0

Java

목록 보기
6/37
post-thumbnail

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);
		}

profile
삐약..뺙뺙

0개의 댓글