고급JAVA 1강 - Collection(Vector, List)
Vector
//컬렉션 객체에 저장되는 데이터는 객체만 저장할 수 있다.
//객체 생성
Vector v1 = new Vector(); //예전 방식 - 모든 객체를 다 저장할 수 있음.
(Object로 형변환되어 저장됨)
System.out.println("처음 크기 : " + v1.size());
//데이터 추가 : add(추가할 데이터)
//반환값 : 성공(true), 실패(false)
v1.add("AAAA");
v1.add(new Integer(123)); //숫자를 저장하려면 정수형 객체로 변환해서 저장해야 함.(옛날 방식)
v1.add(111); //자동으로 객체화시켜서 저장해줌. = autoboxing(오토박싱)으로 자동으로 객체화 된다.
v1.add('a');
v1.add(true); //논리형 데이터도 저장 가능
boolean r = v1.add(3.14);
System.out.println("v1의 크기 : " + v1.size());
System.out.println("반환값 : " + r);
System.out.println("v1 ==> "+ v1); //현재 들어있는 값을 알고싶을 때 v1.toString()과 같은 의미
//데이터 추가2 : addElement(추가할 데이터)
//이전 버전의 vector에서 사용하던 메서드
v1.addElement("KKK");
System.out.println("v1 ==> " + v1);
//데이터 추가3 : add(index, 데이터) - 벡터 내부의 자료는 배열로 관리됨(인덱스 값이 있음)
// ==> index번째에 '데이터'를 끼워 넣는다.
// ==> index는 0부터 시작한다.
// ==> 반환값은 없다.
v1.add(1, "ZZZ"); //1번인덱스 자리에 ZZZ를 추가(원래 자리의 자료들은 뒤로 밀려남)
System.out.println("v1 ==> " + v1);
//데이터 수정 : set(index, 새로운 데이터)
// ==> 'index'번째 자료를 '새로운 데이터'로 변경한다.
// 반환값 : 원래의 데이터
String temp = (String)v1.set(0, "YYYY");// 이걸 casting이라고 함.
//자식 -> 부모 형변환 : 자동형변환, 부모 -> 자식 형변환 : 직접 해줘야 함.
System.out.println("v1 ==> " + v1);
System.out.println("원래의 데이터 : " + temp);
//데이터 삭제 : remove(index)
// ==> 'index'번째의 데이터를 삭제한다.
// ==> 반환값 : 삭제된 데이터
v1.remove(0);
System.out.println("삭제 후 : " + v1);
temp = (String)v1.remove(0);
System.out.println("삭제 후 : " + v1);
System.out.println("삭제된 데이터 : " + temp);
//데이터 삭제2 : remove(삭제할 데이터)
// ==> '삭제할 데이터'를 찾아서 삭제한다.
// ==> '삭제할 데이터'가 여러개이면 앞에서부터 삭제된다.
// ==> 반환값 : 삭제성공(true), 삭제실패(false)
// ==> '삭제할 데이터'가 '정수형' 이거나 'char형'일 경우에는
'삭제할 데이터'를 객체로 변환해서 사용해야 한다.
v1.remove("KKK");
System.out.println("삭제 후 : " + v1);
//v1.remove(111); //삭제가 안됨 => 인덱스 번호로 인식
v1.remove(new Integer(111));
System.out.println("삭제 후 : " + v1);
//v1.remove('a'); //삭제가 안됨 => 문자 하나의 코드값으로 변경됨, a 문자열의 코드값 : 97
v1.remove(new Character('a'));
System.out.println("삭제 후 : " + v1);
v1.remove(true); //형변환 안해도 에러 안 남.
System.out.println("삭제 후 : " + v1);
v1.remove(3.14); //형변환 안해도 에러 안 남.
System.out.println("삭제 후 : " + v1);
//데이터 꺼내오기 : get(index)
// ==> 'index'번째의 데이터를 반환한다.
int data = (int)v1.get(0);
System.out.println("0번째 자료 : " + data);
//--------------------------------------------------------------------------
/*
제네릭 타입(Generic Type)
==> 클래스 내부에서 사용할 데이터의 타입을 외부에서 지정하는 기법
==> 객체를 선언할 때 < >안에 그 객체가 사용할 데이터의 타입을 정해준다.
==> 이런 식으로 선언하게 되면 그 데이터 타입 이외의 데이터를 저장할 수 없다.
단, 제네릭으로 선언될 수 있는 데이터 타입은 클래스형이어야 한다.
예) int ==> Integer, boolean ==> Boolean,
char ==> Character 등올 대체해서 사용해야 한다.
==> 제네릭 타입으로 선언하게 되면 데이터르 꺼내올 때 별도의 형변환이 필요없다.
*/
Vector<String> v2 = new Vector<>(); //우측의 제네릭 <> 안은 JDK1.7부터 생략가능
Vector<Integer> v3 = new Vector<>();
v2.add("안녕하세요");
//v2.add(123); //오류 : 제네릭 타입과 맞지 않은 자료형 추가
String temp2 = v2.get(0); //형변환이 필요없다.
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); //v4가 가지고 있는 데이터를 v2에서 삭제
System.out.println("v2 ==> " + 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) {//v2자리에 배열, 벡터, set 등 사용 가능
System.out.println(s);
}
}
ArrayList
//ArrayList는 기본적인 사용법이 Vector와 같다.
ArrayList list1 = new ArrayList<>();
//add()메서드를 이용해서 추가한다.
list1.add("aaa");
list1.add("bbb");
list1.add(123);
list1.add('k');
list1.add(true);
list1.add(123.45);
System.out.println("list1 ==> " + list1 );
System.out.println("size ==> " + list1.size());
//get()메서드로 데이터를 꺼내온다.
System.out.println("2번째 데이터 : " + list1.get(2));
//데이터 끼워넣기
list1.add(3,"zzz");
System.out.println("list1 ==> " + list1 );
//데이터 수정하기
String temp = (String)list1.set(3, "yyy"); //3번째 데이터의 값을 "yyy"로 변경
System.out.println("temp => " + temp);
System.out.println("list1 => " + list1);
//삭제도 같다.
list1.remove(3); //3번 인덱스의 값을 삭제
System.out.println("list1 => " + list1);
list1.remove("bbb");
System.out.println("list1 => " + 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")); //있는지 없는지 검사
System.out.println("YYY값 존재 여부 : " + list2.contains("YYY")); //있는지 없는지 검사
//indexOf(비교객체)
// ==> List에 '비교객체'가 있으면 '비교객체'가 있는 index값을 반환한다.
// 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(); //list2에 저장된 5개의 데이터가 strArr배열에 저장됨
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]); //String 타입의 배열로 변환됨
for(int i = 0; i < strArr2.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> list = new ArrayList<>();
//5명의 사람 이름 입력받기
//ArrayList에 저장하기
System.out.println("5명의 이름을 입력해주세요.");
for(int i = 1; i <= 5; i ++) {
System.out.print(i + "번째 사람 이름 : ");
String name = sc.next();
list.add(name);
}
System.out.println();
System.out.println("김씨 성을 가진 사람들");
//저장된 ArrayList의 데이터 중 '김'씨 성의 이름을 모두 출력하기
//방법1 - 첫 번째 글자를 잘라내는 방법
for(String name : list) {
if(name.substring(0, 1).equals("김")) {//substring의 반환값 = String
System.out.print(name);
System.out.print(" / ");
}
}
//방법2 - 첫 번째 글자를 꺼내오는 방법
for(String name : list) {
if(name.charAt(0) == '김') {//charAt의 반환값 = Character
System.out.print(name);
System.out.print(" ");
}
}
//방법3 -
for(String name : list) {
if(name.indexOf("김") == 0) {//0번째 글자가 김일 때
System.out.print(name);
System.out.print(" ");
}
}
//방법4
for(String name : list) {
if(name.startsWith("김")) {//김으로 시작하는게 true일 때
System.out.print(name);
System.out.print(" ");
}
}
}
}
과제
문제) 5명의 별명을 입력받아 ArrayList에 저장한 후 이들 중 별명의 길이가 제일 긴 별명을 출력하시오.
(입력은 Scanner 이용)
Scanner sc = new Scanner(System.in);
ArrayList<String> nameList = new ArrayList<>();
//5명의 별명 입력받아 ArrayList에 저장
System.out.println("5명의 별명을 입력해주세요.");
for(int i = 1; i <= 5; i++) {
System.out.println(i + "번째 사람 별명 : ");
String name = sc.next();
nameList.add(name);
}
//별명의 길이 비교 -
//첫번째 방법
int max = 0;
for(int i = 0; i < nameList.size(); i++) {
if(nameList.get(i).length() > nameList.get(max).length()) {
String temp = null;
temp = nameList.get(i);
nameList.set(i, nameList.get(max));
nameList.set(max, temp);
}
}
//제일 긴 별명 출력(최대값)
System.out.print(nameList.get(max));
Author And Source
이 문제에 관하여(고급JAVA 1강 - Collection(Vector, List)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gksmf6699/고급JAVA-1강-CollectionVector-List저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)