package kr.or.ddit.basic;
import java.util.Vector;
public class VectorTest01 {
public static void main(String[] args) {
// 컬렉션 객체 저장되는 데이터는 객체만 저장할 수 있다.
// 객체 생성
Vector vl = new Vector(); //모든 객체(데이터)를 저장 가능
System.out.println("처음 크기 : "+ vl.size()); //크기 나옴
데이터 추가: add(추가할 데이터)
//반환값 : 성공(true),실패(false)
vl.add("AAAA");
vl.add(new Integer(123));// 객체화 시켜서 넣어야됨(불편해..)
vl.add(111);//요즘은 개선되어 숫자 데이터를 넣어도 됨(오토 박싱으로 자동으로 객체화 된다.)
vl.add('a');//오토박싱
vl.add(true);//오토박싱
boolean r = vl.add(3.14);//실수형도 가능
System.out.println("vl의 크기 : "+vl.size());
System.out.println("반환값 : "+r);
System.out.println("vl ==> "+vl);//벡터에 현재 들어 있는 값
System.out.println("vl ==> "+vl.toString());//위와 같음
데이터 추가2: addElement(추가할 데이터)
//이전 버전의 Vector에서 사용하던 메서드
vl.addElement("KKK");
System.out.println("vl =>"+vl);
데이터 추가3: add(index, 데이터)
//==> index번째에 '데이터'를 끼워 넣는다.
//==> index는 0부터 시작한다.
//==> 반환값은 없다.
vl.add(1, "ZZZ");//1 번째 자리에 ZZZ를 추가해라
System.out.println("vl =>"+vl);//ZZZ가 추가되고 나머지는 뒤로 밀려남
데이터 수정: set(index, 새로운 데이터)
// ==> 'index'번째 자료를 '새로운 데이터'로 변경한다.
// 반환값: 원래의 데이터 반환됨
String temp = (String)vl.set(0, "YYYY"); //데이터 형이 바뀐 데이터가 들어감
//부모객체 변수에는 자식 객체를 저장할 수 있지만 부모객체를 자식에 저장할 때는 자동으로 형변환이 일어나지 않음 그래서 형변환 해주기
System.out.println("v1 =>"+vl);
System.out.println("원래의 데이터 : "+ temp);
데이터 삭제 : remove(index)
// ==> 'index'번째의 데이터를 삭제한다.
// ==> 반환값: 삭제된 데이터가 반환값으로 나옴
vl.remove(0);//0번재 값 삭제
System.out.println("삭제 후 : "+ vl);
temp = (String)vl.remove(0);
System.out.println("삭제 후 : "+ vl);
System.out.println("삭제된 데이터 : "+ temp);
데이터 삭제2: remove(삭제할 데이터) --> 한번에 한개씩만 삭제 가능
// ==> '삭제할 데이터'를 찾아서 삭제한다.
// ==> '삭제할 데이터'가 여러개이면 앞에서부터 삭제된다.
// ==> 반환값: 삭제성공(true), 삭제실패(false)
// ==> '삭제할 데이터'가 '정수형'이거나 'char형'일 경우에는 '삭제할 데이터'를 객체로 변환해서 사용해야 한다.
vl.remove("KKK");
System.out.println("삭제 후 : "+vl);
// vl.remove(111);//111은 삭제가 안됨(오류) -> 인덱스로 인식하기 때문에 에러가남 -> 이럴때는 어쩔 수 없이 객체화 시켜야함
vl.remove(new Integer(111));
System.out.println("삭제 후 : "+vl);
// vl.remove('a');//위와 같은 에러가 남 : 작은 따옴표로 감싼 문자는 코드 값으로 바뀌어서 처리가 됨 (a=97)
vl.remove(new Character('a'));
System.out.println("삭제 후 : "+vl);
vl.remove(true);
System.out.println("삭제 후 : "+vl);
vl.remove(3.14);
System.out.println("삭제 후 : "+vl);
데이터 꺼내오기 : get(index)
// ==> 'index'번째의 데이터를 반환한다.
int data = (int)vl.get(0);
System.out.println("0번째 자료 : " + data);
//----------------------------------------------------
/**
* 제네릭 타입(Generic Type) ==> 클래스 내부에서 사용할 데이터의 타입을 외부에서 지정하는 기법
* => 객체를 선언할 때 <>안에 그 객체가 사용할 데이터의 타입을 정해준다.
* => 이런식으로 선언하게 되면 그 데티어 타입 이외의 데이터를 저장할 수 없다. 단, 제네릭으로 선언될 수 있는 데이터 타입은 클래스형이어야 한다.
* 예) int ==> Integer, boolean ==> Boolean, char ==> Character등으로 대체해서 사용해야 한다.
* => 제네릭 타입으로 선언하게 되면 데이터를 꺼내올 때 별도의 형변환이 필요없다.
*/
Vector<String> v2 = new Vector<>();//Vector<String> v2 = new Vector<String>();String 생략 가능
Vector<Integer> v3 = new Vector<>();
v2.add("안녕하세요");
// v2.add(123); //오류: 제네릭 타입과 맞지 않는 자료형 추가
String temp2 = v2.get(0);//v2에는 string만 있기 때문에 형변환이 필요없다.
Vector<Vector> vv = new Vector<>(); //2차원 배열
Vector<Vector<Vector>> vvv = new Vector<>(); //3차원 배열
//-------------------------------------------------------
System.out.println("-------------------------------------");
v2.clear(); //전체 데이터 삭제
System.out.println("v2의 크기 : "+ v2.size());
v2.add("AAA");
v2.add("BBB");
v2.add("CCC");
v2.add("DDD");
v2.add("EEE");
Vector<String> v4 = new Vector<>();
v4.add("BBB");
v4.add("EEE");
System.out.println("v2 =>"+v2);
System.out.println("v4 =>"+v4);
**데이터 삭제3** **: removeAll(Collection 객체) -> 벡터가 가지고 있는것 중에 괄호 속에 들어있는 것을 삭제해라
// => 'collection객체'가 가지고 있는 데이터를 모두 삭제한다.
// => 반환값 : 성공(true), 실패(false)
v2.removeAll(v4); //2에서 4가 가지고 있는 것들을 삭제해라
System.out.println("v2.removeAll(v4) =>"+v2);
System.out.println();
System.out.println("--------------------------------");
v2.clear();
v2.add("AAA");
v2.add("BBB");
v2.add("CCC");
v2.add("DDD");
v2.add("EEE");
//전체를 하나하나 꺼내서 사용하고 싶을떼 반복문 사용
//vector의 데이터를 처음부터 차례로 읽어와 처리하고 싶으면 반복문을 사용하면 된다.
for (int i = 0; i < v2.size(); i++) {
System.out.println(i + "번째 자료 : "+ v2.get(i));
}
System.out.println("-----------------------------");
//향상된 for 문
for(String s : v2){//벡터 크기만큼 첫번재 데이터를 꺼내와서 s에 저장하고 밒에 출력문을 출력하고 또 올라가서 가져오고 저장하고 출력함
System.out.println(s);
}
}
}
package kr.or.ddit.basic;
import java.util.ArrayList;
public class ArrayListTect01 {
public static void main(String[] args) {
//ArrayList는 기본적인 사용법이 Vector와 같다.
ArrayList list1 = new ArrayList();//객체 생성
//add()메서드를 이용해서 추가한다.
list1.add("aaa");
list1.add("bbb");
list1.add(123);
list1.add('k');
list1.add(false);
list1.add(123.45);
System.out.println("list =>"+ list1);
System.out.println("size =>"+list1.size());
//get()메서드로 데이터를 꺼내온다.
System.out.println("2번째 데이터: "+ list1.get(2));
//데이터 끼워넣기
list1.add(3,"zzz");
System.out.println("list =>"+ list1);
//데이터 수정하기
String temp = (String)list1.set(3, "yyy");
System.out.println("temp =>"+temp);
System.out.println("list =>"+list1);
//삭제도 같다.
list1.remove(3);
System.out.println("list =>"+ list1);
list1.remove("bbb");
System.out.println("list =>"+ list1);
System.out.println();
System.out.println("-------------------------------------");
//제네릭을 사용할 수 있다.
ArrayList<String> list2 = new ArrayList<>();
list2.add("AAA");
list2.add("BBB");
list2.add("CCC");
list2.add("DDD");
list2.add("EEE");
for (int i = 0; i < list2.size(); i++) {
System.out.println(i+"==>"+list2.get(i));
}
System.out.println("-------------------------------");
for(String str : list2){
System.out.println(str);
}
System.out.println("-------------------------------");
contains(비교객체)
// ==> List에 '비교객체'가 있으면 true, 없으면 false 반환
System.out.println("DDD값 존재 여부: "+ list2.contains("DDD")); //TURE
System.out.println("YYY값 존재 여부: "+ list2.contains("YYY")); //FALSE
indexOf(비교객체)
//=> List에 '비교객체'가 있으면 '비교객체'가 있는 index값을 반환한다. 없으면 -1을 반환한다.
System.out.println("DDD의 위치값 : "+ list2.indexOf("DDD"));
System.out.println("YYY의 위치값 : "+ list2.indexOf("YYY"));
toArray() => List안의 데이터를 배열로 변환하여 변환한다.
// => 기본적으로 Object형 배열로 변환한다.
//지정한 제네릭 타입에 맞는 배열로 번환하기
//=>toArray(new 제네릭타입[0]);
Object[] strArr = list2.toArray(); // object는 형변환 필요
System.out.println("배열의 개수: "+strArr.length);
for (int i = 0; i < strArr.length; i++) {
String str = (String)strArr[i];//형변환 불편
System.out.println(i + "==>" + str);
}
System.out.println("-------------------------------");
String[] strArr2=list2.toArray(new String[0]);
for (int i = 0; i < strArr.length; i++) {
String str =strArr2[i];//형변환 필요 없음
System.out.println(i + "==>" + str);
}
}
}
문제) 5명의 사람 이름을 입력받아 ArrayList에 저장한 후에
저장된 ArrayList의 데이터 중 '김'씨 성의 이름을 모두 출력하시오.
(단, 입력은 Scanner 객체를 이용한다.)
public class ArrayListTest02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> strArr = new ArrayList<>();
System.out.println(strArr);
System.out.println("이름을 입력하세요.");
for(int i = 0; i < 5; i++){
String str = sc.nextLine();
strArr.add(str);
}
System.out.println(strArr);
**substring**
System.out.println("1번쨰-------------------------------------------------------------");
System.out.println();
for (int i = 0; i < strArr.size(); i++) {
if(strArr.get(i).substring(0, 1).equals("김")){
System.out.print("김씨자르기 : " + strArr.get(i) + "\t");
}
}
System.out.println(strArr);
**subSequence**
System.out.println("2번째-------------------------------------------------------------");
System.out.println();
for(String list : strArr){
if(list.subSequence(0, 1).equals("김")){
System.out.print("김씨subSequence : " + list + "\t ");
}
}
System.out.println(strArr);
**startsWith**
System.out.println("3번쨰-------------------------------------------------------------");
System.out.println();
for(int i = 0; i < strArr.size(); i++){
if(strArr.get(i).startsWith("김")){
System.out.print("김씨포함 : " + strArr.get(i) + "\t");
}
System.out.println(strArr);
**charAt**
System.out.println("4번쨰------------------------------------------------------------");
System.out.println();
for (int i = 0; i < strArr.size(); i++) {
if(strArr.get(i).charAt(0) == '김'){
System.out.print("김씨charAt : " + strArr.get(i) + "\t ");
}
}
**indexOf**
System.out.println();
System.out.println("5번쨰------------------------------------------------------------");
for (int i = 0; i < strArr.size(); i++) {
if(strArr.get(i).indexOf("김") == 0){
System.out.print("김씨indexOf : " + strArr.get(i) + "\t ");
}
}