기본 설정 (인코딩)
(빼먹은게 있을 수 있음 JSP위쪽은 설정해줄것)
Collection
Collection들은 객체만 저장할 수 있다.
기본데이터들은 넣기 위해 객체화가(Wrapper Class) 필요하다
객체화가 된 것은 Boxing 되며 꺼낼땐 Unboxing해서 꺼낸다
제네릭 타입(Generic Type)
- 클래스 내부에서 사용할 데이터의 타입을 객체를 생성할 때 외부에서 지정해주는 기법
- 객체를 선언할 때 <>괄호 안에 그 클래스 내부에서 사용할 데이터의 타입을 정해주는 것을 말한다.
- 이렇게 선언하게되면 지정하나 데이터 타입 이외의 다른 종류의 데이터를 저장할 수 없다.
- 이 때 제네릭으로 선언될 수 있는 데이터 타입은 클래스형 이어야 한다
(int => Integer, char => Character, boolean => Boolean 등..) - 제네릭 타입으로 선언하게 되면 데이터를 꺼내올 때 별도의 형변환이 필요없다.
import java.util.Vector;
public class VectorTest {
public static void main(String[] args) {
Vector<Integer> v2 = new Vector<Integer>(); // int형 자료만 저장
Vector<String> v3 = new Vector<String>(); // String형 자료만 저장
v3.add("안녕하세요..");
// v3.add(123); // 오류 : 지정한 제네릭 타입과 다른 종료를 저장할 수 없다
String sTemp2 = v3.get(0); // 별도의 casting없이 사용할 수 있다.
System.out.println("sTemp2 : "+ sTemp2); // sTemp2 : 안녕하세요..
Vector<Vector> vv = new Vector<Vector>();
Vector<Vector<Vector>> vvv = new Vector<Vector<Vector>>();
v3.clear();
System.out.println("v3의 size : "+v3.size());
v3.add("AAAA");
v3.add("BBBB");
v3.add("CCCC");
v3.add("DDDD");
v3.add("EEEE");
// 백터의 데이터를 순서대로 모두 가져와 사용하기 ==> 반복문 이용하기(주로 for문 사용)
for(int i=0;i<v3.size();i++) {
System.out.println(i+ " 번째 자료 : "+v3.get(i));
}
// 0 번째 자료 : AAAA
// 1 번째 자료 : BBBB
// 2 번째 자료 : CCCC
// 3 번째 자료 : DDDD
// 4 번째 자료 : EEEE
// 향상된 for문
for(String str : v3) {
System.out.println(str);
}
// AAAA
// BBBB
// CCCC
// DDDD
// EEEE
}
}
List
- add(추가할 데이터)
- 반환값 : 추가 성공(true), 추가 실패(false) - addElement(추가할 데이터)
- 이전 버전의 프로그램과의 호환성을 위해 남아있는 메서드 - add(index, 데이터)
- 'index'번째에 데이터를 끼워 넣는다
- 'index'는 0부터 시작하며 반환값은 없음 - get(index)
- 'index'번째의 데이터를 꺼내서 반환 - set(index, 새로운 데이터)
- 'index'번째의 데이터를 '새로운 데이터'로 변경한다
- 반환값 : 변경되기 전의 데이터 - remove(index)
- 'index'번째의 데이터를 삭제한다
- 반환값 : 삭제된데이터 - remove(삭제할데이터)
- '삭제할 데이터'를 찾아서 삭제한다
- '삭제할데이터'가 여러개이면 이 중에 제일 첫번째 자료가 삭제된다.
- 반환값 : 삭제성공(true), 삭제실패(false)
- 삭제할 데이터가 '정수형' 이거나 'char형'일 경우에는 반드시 객체로 변환해서 사용해야함
- 정수형 : Integer.valueOf(삭제할int데이터)
- char형 : Character.valueOf('삭제할char데이터') - clear()
- 전체 데이터 삭제 - removeAll(Collection객체)
- 데이터들 중에서 'Collection객체'가 가지고 있는 모든 데이터를 삭제한다
- 반환값 : 성공(true), 실패(false) - ArrayList에서 추가적으로 사용되는 메서드
- contains(비교데이터)
- List에 저장된 데이터들 중에서 '비교데이터'가 있으면 true, 없으면 false 반환 - indexOf(비교데이터), lastIndexOf(비교데이터)
- List에 '비교데이터'가 있으면 '비교데이터'가 저장된 index값을 반환
- 없으면 -1을 반환한다
- indexOf() 검색방향이 앞에서 뒤로, lastIndexOf는 뒤에서 앞으로 검색
- 비교데이터가 여러개 이면 첫번째로 찾아진 데이터의 위치값을 반환한다. - toArray()
- List 안의 데이터들을 배열로 변환해서 반환한다.
- 기본적으로 Object형 배열로 변환한다 - toArray(new 제너릭타입[0])
- 제네릭타입의 배열로 변환해서 반환한다
- contains(비교데이터)
Vetor
import java.util.Vector;
public class VectorTest {
public static void main(String[] args) {
// 객체 생성
Vector v1 = new Vector(); // 데이터 타입 설정X >> Object
System.out.println("처음 크기 : "+v1.size()); // 처음 크기 : 0
v1.add("aaaa"); // 자동으로 Object로 형변환
v1.add(new Integer(111)); // 객체화 Wrapper Class
v1.add(123); // 자동으로 객체화 autoBoxing > autoUnboxing 지원
v1.add('a');
v1.add(true);
boolean r = v1.add(3.14);
// 1. add
System.out.println("v1의 크기 : "+v1.size()); // v1의 크기 : 6
System.out.println("반환값 : "+r); // 반환값 : true
System.out.println("v1 => "+v1.toString()); // v1 => [aaaa, 111, 123, a, true, 3.14]
// toString()을 쓰지 않고도 똑같은 값을 얻을 수 있다.
System.out.println("v1 => "+v1); // v1 => [aaaa, 111, 123, a, true, 3.14]
// 2. addElemnt
v1.addElement("CCC");
System.out.println("v1 => "+v1); // v1 => [aaaa, 111, 123, a, true, 3.14, CCC]
// 3. add(index, )
v1.add(1, "KKK");
System.out.println("v1 => "+v1); // v1 => [aaaa, KKK, 111, 123, a, true, 3.14, CCC]
// 4. get
System.out.println("0번째 데이터 : "+v1.get(0)); // 0번째 데이터 : aaaa
int iTemp = (int) v1.get(2); // Object형이기 때문에 int로 casting
System.out.println("iTemp : "+iTemp); // iTemp : 111
// 5. set
String sTemp = (String) v1.set(0, "zzzz");
System.out.println("v1 => "+v1); // v1 => [zzzz, KKK, 111, 123, a, true, 3.14, CCC]
System.out.println("sTemp : "+sTemp); // sTemp : aaaa
// 6. remove(index)
v1.remove(0);
System.out.println("삭제 후 v1 => "+v1); // 삭제 후 v1 => [KKK, 111, 123, a, true, 3.14, CCC]
sTemp = (String) v1.remove(0);
System.out.println("삭제 후 v1 => "+v1); // 삭제 후 v1 => [111, 123, a, true, 3.14, CCC]
System.out.println("삭제된 데이터 : "+sTemp); // 삭제된 데이터 : KKK
// 7. remove
v1.remove("CCC");
System.out.println("CCC 삭제 후 v1 => "+v1); // 삭제 후 v1 => [111, 123, a, true, 3.14]
// v1.remove(123); // 123번째의 인덱스를 참조하기 때문에 int은 객체화 필요
// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 123
// v1.remove(new Integer(123)); // 방법 1. 객체화를 통한 삭제 (java 1.9 이후 사용불가능)
v1.remove(Integer.valueOf(123)); // 방법 2
System.out.println("123 삭제 후 v1 => "+v1); // 123 삭제 후 v1 => [111, a, true, 3.14]
// v1.remove('a'); // char형도 숫자로 반환되어 인덱스를 참조하기 때문에 객체화 필요
// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 97
v1.remove(Character.valueOf('a'));
System.out.println("a 삭제 후 v1 => "+v1); // a 삭제 후 v1 => [111, true, 3.14]
// boolean타입이나 실수형 타입은 정상 작동
v1.remove(true);
System.out.println("true 삭제 후 v1 => "+v1); // true 삭제 후 v1 => [111, 3.14]
v1.remove(3.14);
System.out.println("3.14 삭제 후 v1 => "+v1); // 3.14 삭제 후 v1 => [111]
// 8. clear()
v1.clear();
System.out.println("clear 후 v1 => "+v1); // clear 후 v1 => []
// 9. removeAll()
Vector<String> v3 = new Vector<String>(); // String형 자료만 저장
v3.add("AAAA");
v3.add("BBBB");
v3.add("CCCC");
v3.add("DDDD");
v3.add("EEEE");
Vector<String> v4 = new Vector<String>();
v4.add("BBBB");
v4.add("EEEE");
v3.removeAll(v4); // v3의 데이터들 중에서 v4가 가지고있는 데이터를 모두 삭제한다
System.out.println("v3 => "+v3); // v3 => [AAAA, CCCC, DDDD]
}
}
ArrayList
import java.util.ArrayList;
public class ArrayListTest01 {
public static void main(String[] args) {
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("size : "+list1.size()); // size : 6
System.out.println("list1 => "+list1.toString()); // list1 => [aaa, bbb, 123, k, true, 123.45]
System.out.println("list1 => "+list1); // list1 => [aaa, bbb, 123, k, true, 123.45]
// add(index,)
list1.add(3, "zzz");
System.out.println("list1 => "+list1); // list1 => [aaa, bbb, 123, zzz, k, true, 123.45]
// get()
System.out.println("1번째 자료 : "+list1.get(1));
// set
String sTemp = (String) list1.set(3, "yyy");
System.out.println("list1 = >"+list1); // list1 = >[aaa, bbb, 123, yyy, k, true, 123.45]
System.out.println("sTemp : "+sTemp); // sTemp : zzz
// remove
list1.remove(3);
System.out.println("3번째 자료 삭제 후 list1 => "+list1); // 3번째 자료 삭제 후 list1 => [aaa, bbb, 123, k, true, 123.45]
list1.remove("bbb");
System.out.println("bbb 자료삭제 후 list1 => "+list1); // bbb 자료삭제 후 list1 => [aaa, 123, k, true, 123.45]
// 제네릭을 사용
ArrayList<String> list2 = new ArrayList<String>();
list2.add("AAAA");
list2.add("BBBB");
list2.add("CCCC");
list2.add("DDDD");
list2.add("EEEE");
// list2.add(200); // 오류
for(int i=0; i<list2.size(); i++) {
System.out.println(i+" ==> "+list2.get(i));
}
// 0 ==> AAAA
// 1 ==> BBBB
// 2 ==> CCCC
// 3 ==> DDDD
// 4 ==> EEEE
// 향상된 for문
for(String s : list2) {
System.out.println(s);
}
// AAAA
// BBBB
// CCCC
// DDDD
// EEEE
// contains(비교데이터)
System.out.println("DDDD값 존재 여부 : "+list2.contains("DDDD")); // DDDD값 존재 여부 : true
System.out.println("ZZZZ값 존재 여부 : "+list2.contains("DDDD")); // ZZZZ값 존재 여부 : true
// indexOf(비교데이터), lastIndexOf(비교데이터)
list2.add("AAAA");
list2.add("BBBB");
list2.add("CCCC");
list2.add("DDDD");
list2.add("EEEE");
System.out.println("list2 => "+list2); // list2 => [AAAA, BBBB, CCCC, DDDD, EEEE, AAAA, BBBB, CCCC, DDDD, EEEE]
System.out.println("DDDD의 위치 값 : "+list2.indexOf("DDDD")); // DDDD의 위치 값 : 3
System.out.println("ZZZZ의 위치 값 : "+list2.indexOf("ZZZZ")); // ZZZZ의 위치 값 : -1
System.out.println("DDDD의 위치 값 : "+list2.lastIndexOf("DDDD")); // DDDD의 위치 값 : 8
// toArray()
Object[] strArr = list2.toArray();
// String[] strArr2 = (String[]) list2.toArray();
//Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
System.out.println("list의 개수 : "+list2.size()); // list의 개수 : 10
System.out.println("배열의 개수 : "+strArr.length); // 배열의 개수 : 10
for(int i=0; i<strArr.length; i++) {
System.out.print(i+" => "+strArr[i]+"\t");
}
// 0 => AAAA 1 => BBBB 2 => CCCC 3 => DDDD 4 => EEEE 5 => AAAA 6 => BBBB 7 => CCCC 8 => DDDD 9 => EEEE
System.out.println();
// toArray(new 제너릭타입[0])
String[] strArr3 = list2.toArray(new String[0]);
for(String s : strArr3) {
System.out.print(s+"\t");
}
// AAAA BBBB CCCC DDDD EEEE AAAA BBBB CCCC DDDD EEEE
System.out.println();
}
}
Overloading
메소드 이름은 같고 매개변수가 다르게 설정함
예시)
remove(index) > index는 int형
remove(삭제할 데이터) > 객체
Overriding
메소드 재정의(타입 반환값이 같음) 틀은 같으나 처리하는 내용을 다르게 함(상속)
5명의 사람을 입력 받아 ArrayList에 저장한 후에 저장된 데이터들 중에서 '김'씨 성의 이름을 모두 출력하시오.
(입력은 Scanner객체를 이용한다.)
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListTest02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
System.out.print(i+1+"번째 이름을 입력하세요: ");
String name = sc.nextLine();
list.add(name);
}
ArrayList<Integer> index = new ArrayList<Integer>();
int count = 0;
for(String str:list) {
// 앞의 한글자만 떼서 "김"과 동일하는지 확인
if(str.substring(0,1).equals("김")) {
// System.out.println(str);
index.add(count++);
}
// 0번째 자리에 '김'이 포함되어있는지 찾기
if(str.charAt(0)=='김') {
System.out.println(str);
}
// 앞부분부터 포함되어있는 "김"이 0번째 자리인지 찾기
if(str.indexOf("김")==0) {
System.out.println(str);
}
//시작하는 문자열에 "김"이 포함되어있는 지 찾기
if(str.startsWith("김")) {
System.out.println(str);
}
}
for(int i=0; i<index.size();i++) {
System.out.println(list.get(index.get(i)));
}
}
}
5명의 별명을 입력 받아 ArrayList에 저장한 후에 이들 중에 별명의 길이가 제일 긴 별명을 출력하시오
(단, 각 별명의 길이가 모두 다르게 입력한다)
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListTest03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
System.out.println("서로 다른 길이의 별명을 5번 입력하세요");
System.out.print(i+"번째 별명을 입력하세요: ");
String name = sc.nextLine();
list.add(name);
}
// 방법1
String maxStr = list.get(0);
for(String s : list) {
if(maxStr.length()<s.length()) {
maxStr = s;
}
}
// 방법2
int size=0;
for(String s : list) {
if(size<s.length()) {
size=s.length();
}
}
for(String s : list) {
if(size==s.length()) {
System.out.println(s);
}
}
}
}
5명의 별명을 입력 받아 ArrayList에 저장한 후에 이들 중에 별명의 길이가 제일 긴 별명들을 출력하시오
(단, 각 별명의 길이가 같을 수 있다)
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListTest04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
System.out.print(i+"번째 별명을 입력하세요: ");
String name = sc.nextLine();
list.add(name);
}
int size=0;
for(String s : list) {
if(size<=s.length()) {
size=s.length();
}
}
for(String s : list) {
if(size==s.length()) {
System.out.println(s);
}
}
}
}
'JAVA > HIGH JAVA' 카테고리의 다른 글
[JAVA] Map (0) | 2024.04.24 |
---|---|
[JAVA] Equals HashCode (0) | 2024.04.24 |
4/23 Homework - 야구게임, 로또생성기 (0) | 2024.04.24 |
[JAVA] Set (0) | 2024.04.23 |
[JAVA] Stack, Queue, (홈페이지 뒤로가기 구현), 정렬(Sort) (1) | 2024.04.22 |