Java

[고급자바] Collection(Vector)

elog 2023. 3. 1. 06:00

1. Vector

A. 객체 생성

System.out.println("<객체 생성하기>");
Vector v1 = new Vector();

System.out.println("처음 크기 : " + v1.size());

B-1. 데이터 추가하기1

add(추가 할 데이터)

- 반환값 : 추가성공(ture), 추가실패(false)

System.out.println("데이터 추가하기1");
v1.add("aaaa");
v1.add(new Integer(111));
v1.add(123);
v1.add('a');
v1.add(true);
boolean r = v1.add(3.14);
		
System.out.println("현재 크기 : " + v1.size());
System.out.println("반환값 : " + r);

B-2. 데이터 추가하기2

addElemnt(추가 할 데이터)

- 이전 버전의 프로그램과의 호환성을 위해서 남아 있는 메서드

System.out.println("데이터 추가하기2");
v1.addElement("CCC");
System.out.println("v1 => " + v1);

B-3. 데이터 추가하기3

add(index, 데이터)

- 'index'번째에 '데이터'를 끼워 넣는다.

- 'index'는 0부터 시작한다.

- 반환값이 없다.

System.out.println("데이터 추가하기3");
v1.add(1, "KKK");
System.out.println("v1 => " + v1);

C. 데이터 꺼내오기

get(index)

- 'index'번째 데이터를 꺼내서 반환한다.

System.out.println("데이터 꺼내오기");
System.out.println("0번째 데이터 : " + v1.get(0));

int iTemp = (int)v1.get(2);
System.out.println("2번째 데이터 : " + iTemp);
System.out.println();

D. 데이터 수정하기

set(index, 새로운 데이터)

- 'index'번째의 데이터를 ' 새로운 데이터'로 변경한다.

- 반환값 : 원래의 데이터

System.out.println("데이터 수정하기");
String sTemp = (String)v1.set(0, "zzzz");
System.out.println("v1 ==> " + v1);
System.out.println("원래의 데이터 : " + sTemp);

E. 데이터 삭제하기1

remove(index)

- 'index'번째 데이터를 삭제한다.

- 반환값 : 삭제된 데이터

System.out.println("데이터 삭제하기1");
v1.remove(0);
System.out.println("삭제 후 v1 => " + v1);
		
sTemp = (String)v1.remove(0);
System.out.println("삭제 후 v1 => " + v1);
System.out.println("삭제된 데이터 : " + sTemp);

F. 데이터 삭제하기2

remove(삭제 할 데이터)

- '삭제할 데이터'를 찾아서 삭제한다.

- '삭제할 데이터'가 여러 개이면 첫 번째 자료가 삭제된다.

- 반환값 : 삭제성공(true), 삭제실패(false)

- 삭제할 데이터가 '정수형'이거나 'char형'일 경우에는 반드시 객체로 변환해서 사용한다.

System.out.println("데이터 삭제하기2");
v1.remove("CCC");
System.out.println("CCC 삭제 후 v1 => " + v1);
// v1.remove(123);
// v1.remove(new Integer(123)); // 방법1 ==> 1.9버전부터는 사용 불가
v1.remove(Integer.valueOf(123)); // 방법2
System.out.println("123 삭제 후 v1 => " + v1);
		
// v1.remove('a');
v1.remove(new Character('a'));
System.out.println("삭제 후 v1 => " + v1);
		
v1.remove(true);
System.out.println("삭제 후 v1 => " + v1);
		
v1.remove(3.14);
System.out.println("삭제 후 v1 => " + v1);
		
// 전체 데이터 삭제하기 : clear();
v1.clear();
System.out.println("clear 삭제 후 v1 => " + v1);


2-1. 제네릭타입(Generic Type)

: 클래스 내부에서 사용할 데이터 타입을 객체를 상상할 때 외부에서 지정해 주는 기법.

 객체를 선언할 때 < >괄호 안에 그 객체의 내부에서 사용할 데이터의 타입을 정해주는 것을 말한다.

 

- 데이터 타입 이외의 다은 종류의 데이터를 저장할 수 없다.

- 제네릭으로 선언 될 수 있는 데이터 타입은 클래스형이어야 한다.

- int는 Integer, boolean은 Boolean, char는 Charactor 등으로 대체해서 사용해야 한다.

- 제네릭 타입으로 선언하게 되면 데이터를 꺼내올 때 별도의 형변환이 필요없다.

A. 제네릭타입(Generic Type) 생성

System.out.println("제네릭타입(Generic Type)");
Vector<Integer> v2 = new Vector<>(); // int형 자료만 저장할 수 있는 벡터
Vector<String> v3 = new Vector<>(); // String형만 저장할 수 있는 벡터
		
v3.add("안녕하세요");
// v3.add(100);	// 오류 : 다른 종류의 데이터를 저장할 수 없다.
		
String sTemp2 = v3.get(0);
		
Vector<Vector> vv = new Vector<>();
Vector<Vector<Vector>> vvv = new Vector<>();
		
v3.clear();
System.out.println("v3의 size : " + v3.size());

B. 데이터 추가하기

// v3 데이터 추가하기
v3.add("AAA");
v3.add("BBB");
v3.add("CCC");
v3.add("DDD");
v3.add("EEE");
		
// v4 데이터 추가하기
Vector<String> v4 = new Vector<>();
v4.add("BBB");
v4.add("EEE");
		
System.out.println("<데이터 추가하기>");        
System.out.println("v3 => " + v3);
System.out.println("v4 => " + v4);

C. 데이터  삭제하기

removeAll(Collection 객체)

- 벡터의 데이터 중에서 'Collection 객체'가 가지고 있는 모든 데이터를 삭제한다.

- 반환값 : 성공(true), 실패(false)

System.out.println("<데이터 삭제하기>");
v3.removeAll(v4);	// v3의 데이터들 중에서 v4가 가지고 있는 데이터들을 모두 삭제한다.
System.out.println("v3 => " + v3);

D. 벡터의 모든 데이터 출력하기1

System.out.println("<벡터의 모든 데이터 출력하기1>");
v3.clear();
		
v3.add("AAA");
v3.add("BBB");
v3.add("CCC");
v3.add("DDD");
v3.add("EEE");
		
for(int i=0; i<v3.size(); i++) {
	System.out.println(i + "번째 자료 : " + v3.get(i));
}

System.out.println("<벡터의 모든 데이터 출력하기2>");
// 향상된 for문
for (String str : v3) {
	System.out.println(str);
}

D. 전체 코드

public class VectorTest {

	public static void main(String[] args) {
		// 객체 생성
		System.out.println("<객체 생성하기>");
		Vector v1 = new Vector();
		System.out.println("처음 크기 : " + v1.size());
		System.out.println();
		
		// 데이터 추가하기1 
		// add(추가할 데이터)
		// 반환값 : 추가 성공(ture), 추가 실패(false)
		System.out.println("<데이터 추가하기1>");
		v1.add("aaaa");
		v1.add(new Integer(111));
		v1.add(123);	// 오토박싱	, 오토 언박싱이 지원된다.
		v1.add('a');
		v1.add(true);
		boolean r = v1.add(3.14);
		
		System.out.println("현재 크기 : " + v1.size());
		System.out.println("반환값 : " + r);
		System.out.println();
		
		// 데이터 추가하기2 
		// addElemnt(추가할 데이터)
		//	==> 이전 버전의 프로그램과의 호환성을 위해서 남아 있는 메서드
		System.out.println("<데이터 추가하기2>");
		v1.addElement("CCC");
		System.out.println("v1 => " + v1);
		System.out.println();
		
		// 데이터 추가하기3
		// add(index, 데이터)
		//	==> 'index'번째에 '데이터'를 끼워 넣는다.
		//	==> 'index'는 0부터 시작한다.
		//	==> 반환값이 없다.
		System.out.println("<데이터 추가하기3>");
		v1.add(1, "KKK");
		System.out.println("v1 => " + v1);
		System.out.println();
		
		// 데이터 꺼내오기
		// get(index)
		//	==> 'index'번째 데이터를 꺼내서 반환한다.
		System.out.println("<데이터 꺼내오기>");
		System.out.println("0번째 데이터 : " + v1.get(0));
		int iTemp = (int)v1.get(2);
		System.out.println("2번째 데이터 : " + iTemp);
		System.out.println();
		
		// 데이터 수정하기 : set(index, 새로운 데이터)
		//  ==> 'index'번째의 데이터를 '새로운 데이터'로 변경한다.
		//  ==> 반환값 : 원래의 데이터
		System.out.println("<데이터 수정하기>");
		String sTemp = (String)v1.set(0, "zzzz");
		System.out.println("v1 ==> " + v1);
		System.out.println("원래의 데이터 : " + sTemp);
		System.out.println();
		
		// 데이터 삭제하기 : remove(index)
		//  ==> 'index'번째 데이터를 삭제한다.
		//  ==> 반환값 : 삭제된 데이터
		System.out.println("<데이터 삭제하기1>");
		v1.remove(0);
		System.out.println("삭제 후 v1 => " + v1);
		
		sTemp = (String)v1.remove(0);
		System.out.println("삭제 후 v1 => " + v1);
		System.out.println("삭제된 데이터 : " + sTemp);
		System.out.println();
		
		// 데이터 삭제하기2 : remove(삭제 할 데이터)
		//  ==> '삭제할 데이터'를 찾아서 삭제한다.
		//  ==> '삭제할 데이터'가 여러 개이면 첫 번째 자료가 삭제된다.
		//  ==> 반환값 : 삭제성공(true), 삭제실패(false)
		//  ==> 삭제할 데이터가 '정수형'이거나ㅣ 'char형'일 경우에는 반드시 객체로 변환해서 사용한다.
		System.out.println("<데이터 삭제하기2>");
		v1.remove("CCC");
		System.out.println("CCC 삭제 후 v1 => " + v1);
		// v1.remove(123);
		// v1.remove(new Integer(123)); // 방법1 ==> 1.9버전부터는 사용 불가
		v1.remove(Integer.valueOf(123)); // 방법2
		System.out.println("123 삭제 후 v1 => " + v1);
		
		// v1.remove('a');
		v1.remove(new Character('a'));
		System.out.println("삭제 후 v1 => " + v1);
		
		v1.remove(true);
		System.out.println("삭제 후 v1 => " + v1);
		
		v1.remove(3.14);
		System.out.println("삭제 후 v1 => " + v1);
		
		// 전체 데이터 삭제하기 : clear();
		v1.clear();
		System.out.println("clear 삭제 후 v1 => " + v1);
		
		//---------------------------------------------------------
		/*
		제네릭타입(Generic Type) 
		==> 클래스 내부에서 사용할 데이터 타입을 객체를 상상할 때 외부에서 지정해 주는 기법으로 객체를 선언할 때 
		< >괄호 안에 그 객체의 내부에서 사용할 데이터의 타입을 정해주는 것을 말한다.
		
		- 이런석으로 선언하게 되면 그 데이터 타입 이외의 다른 종류의 데이터를 저장할 수 없다.
		- 이때 제네릭으로 선언 될 수 있는 데이터 타입은 클래스형 이여야 한다.
		그래서 int은 Integer, boolean은 Boolean,char는 Charactor 등으로 대체해서 사용해야 한다.
		- 제네릭 타입으로 선언하게 되면 데이터를 꺼내올 때 별도의 형변환이 필요없다. 
		 
		 */
		System.out.println();
		System.out.println("----------------------------------------");
		System.out.println("<제네릭타입(Generic Type)>");
		Vector<Integer> v2 = new Vector<>(); // int형 자료만 저장할 수 있는 벡터
		Vector<String> v3 = new Vector<>(); // String형만 저장할 수 있는 벡터
		
		v3.add("안녕하세요");
//		v3.add(100);	// 오류 : 다른 종류의 데이터를 저장할 수 없다.
		
		String sTemp2 = v3.get(0);	// 형변환 없이 사용할 수 있다.
		
		Vector<Vector> vv = new Vector<>();
		Vector<Vector<Vector>> vvv = new Vector<>();
		
		//-----------------------------------------------------------
		
		v3.clear();
		System.out.println("v3의 size : " + v3.size());
		System.out.println("----------------------------------------");
		
		// v3 데이터 추가하기
		v3.add("AAA");
		v3.add("BBB");
		v3.add("CCC");
		v3.add("DDD");
		v3.add("EEE");
		
		// v4 데이터 추가하기
		Vector<String> v4 = new Vector<>();
		v4.add("BBB");
		v4.add("EEE");
		
		System.out.println("<데이터 추가하기>");
		System.out.println("v3 => " + v3);
		System.out.println("v4 => " + v4);
		System.out.println();
		// 데이터 삭제하기3 : removeAll(Collection 객체)
		//  ==> 벡터의 데이터 중에서 'Collection 객체'가 가지고 있는 모든 데이터를 삭제한다.
		//  ==> 반환값 : 성공(true), 실패(false)
		
		System.out.println("<데이터 삭제하기>");
		v3.removeAll(v4);	// v3의 데이터들 중에서 v4가 가지고 있는 데이터들을 모두 삭제한다.
		System.out.println("v3 => " + v3);
		System.out.println("----------------------------------------");

		// 벡터의 데이터를 순서대로 모두 가져와 사용하고 싶으면 반복문을 사용하면 된다.
		// (주로 for문 사용)
		System.out.println("<벡터의 모든 데이터 출력하기1>");
		v3.clear();
		
		v3.add("AAA");
		v3.add("BBB");
		v3.add("CCC");
		v3.add("DDD");
		v3.add("EEE");
		
		for(int i=0; i<v3.size(); i++) {
			System.out.println(i + "번째 자료 : " + v3.get(i));
		}
		
		System.out.println("----------------------------------------");
		
		System.out.println("<벡터의 모든 데이터 출력하기2>");
		// 향상된 for문
		for (String str : v3) {
			System.out.println(str);
		}
		
	}

}