Object의 toString()를 오버라이딩 때문에 주소값이 아닌 객체값이 바로나옴
addAll(Collection<? extends E> c) : boolean
같은 타입의 다른 객체를 통째로 넣어버림
remove(Object o):boolean
같은 데이터라면 앞에 있는거부터 삭제
지네릭 추가 : <String>
toString() 오버라이딩 삭제 -> 삭제해도 String Class자체에서 가능해서 값 출력이 됨
String Class이기 때문에 str만 가능
equals랑 hashCode가 잘 오버라이딩이 되어있기 때문에 삭제 가능
equals() 오버라이딩을 삭제하면, indexOf()의 값비교가 안되서 자동으로 -1 반환함
/******************************** collection 4th practice ***************************************/
public void method04() {
// 연습할 거 포인트
// 오버라이딩 해제하면서, equals()와 hashCode() 비교
// 반환 타입(boolean,int등)에 따라 if,for,while문 조건식에 뭔가 응용해보기
// 반환 받은 객체로는 뭘 해볼 수 있을까? ==나 equals() 사용해서 해당 str 값이 있으면 if문 써봐도 될 듯
ArrayList<Student> aList = new ArrayList<>(2);
ArrayList<Student> aList2 = new ArrayList<Student>(1);
// vo클래스에 있는 오버라이딩된 toStirng(), equals(), hashCoding()
// 전부 주석처리
// add(E e):boolean
aList.add(new Student("아이유",100));
System.out.println(aList); // [chap12_Collection.A_List.model.vo.Student@6d06d69c]
System.out.println(aList); // vo class의 toString() 메소드 만들어 준 이후 : [아이유(100점)]
// Object의 toString()를 오버라이딩 때문에 주소값이 아닌 객체값이 바로나옴
// 길이가 0 1 2인데 0하나만 들어갔지만 자동으로 0만 나오고 null값이 나오거나 에러가 뜨지 않음
// add(int index, E element)
aList.add(1, new Student("손예진",100));
System.out.println(aList); // [아이유(100점), 손예진(100점)]
// addAll(Collection<? extends E> c) : boolean
// 같은 타입의 다른 객체를 통째로 넣어버림
aList2.addAll(aList);
System.out.println("aList2 = "+aList2); // aList2 = [아이유(100점), 손예진(100점)]
// addAll(int index, Collection c) : boolean
// toString() 오버라이딩 주석 후
aList2.addAll(1,aList); // 1번 인덱스부터 새데이터를 넣겠다
System.out.println(aList2); // [아이유(100점), 아이유(100점), 손예진(100점), 손예진(100점)]
// 장점1. 크기 제약 x
// .size() : 인덱스 길이 반환
System.out.println(aList2.size()); // 4
if(aList2.size() == 4) { // ==은 primitive타입일 경우 값 비교, 참조형일 경우 주소값비교
System.out.println("aList2의 길이는 4"); // aList2의 길이는 4
aList.add(new Student("if로추가한add",100));
System.out.println("aList added : "+aList); // aList added : [아이유(100점), 손예진(100점), if로추가한add(100점)]
}
// 장점2. 추가/삭제/정렬 기능처리 간단
// 삭제
// remove(int index):E
// // remove()의 return은 삭제한 값을 돌려준다
System.out.println(aList.remove(2)); // if로추가한add(100점) <- 삭제한 객체 반환
aList2.remove(aList.size()); // aList의 길이인 인덱스를 삭제
System.out.println(aList2); // [아이유(100점), 아이유(100점), 손예진(100점)]
// 삭제
// remove(Object o):boolean
// 같은 데이터라면 앞에 있는거부터 삭제
// aList2.remove(new Student("아이유",100));
System.out.println(aList2); // equals()가 오버라이딩이 안되어 있어서 값 비교가 아니라 주소값 비교라 삭제 못한 것.
// equals() 오버라이딩 후
aList2.remove(new Student("아이유",100));
System.out.println(aList2); // [아이유(100점), 손예진(100점)]
// 지네릭 추가 : <String>
// toString() 오버라이딩 삭제 -> 삭제해도 String Class자체에서 가능해서 값 출력이 됨
// String Class이기 때문에 str만 가능
// equals랑 hashCode가 잘 오버라이딩이 되어있기 때문에 삭제 가능
ArrayList<String> listStr = new ArrayList<>(2);
listStr.add(new String("킴"));
// str이라면 인자 몇개까지 가능할까?
// listStr.add(new String("킴","킴")); parameter 하나만 가능
listStr.add(new String());
System.out.println(listStr); // [킴, ]
// str 인자 두개하고 싶으면 제네릭 두개쓰면 될까?
// 파라미터 부적잘하다네. 제네리 두개 가능했던 것 같은데 뒤에 코드를 봐야할 듯
// ArrayList<Student, String> listStrDouble = new ArrayList<Student, String>(1);
// set(int index, E e)
// 해당 인덱스 번호에 값 교체
aList.set(1,new Student("손예진 결혼",100));
System.out.println(aList); // [아이유(100점), 손예진 결혼(100점)]
//get(int index):E
// 인덱스번호의 엘리먼트 값을 가져온다
System.out.println(aList.get(1)); // 손예진 결혼(100점)
// contains(Object) : boolean
// indexObject : int
// 없으면 -1 반환
System.out.println(aList.indexOf(1)); // -1
System.out.println(aList); // [아이유(100점), 손예진 결혼(100점)]
System.out.println(aList.indexOf(new Student("아이유",100))); // 0 <-아이유가 0번째 인덱스에 있다는걸 반환
// equals() 오버라이딩을 삭제하면, 값비교가 안되서 자동으로 -1 반환함
if(aList.indexOf(new Student("아이유",100)) >= 0) {
System.out.println("aList 0보다 크면 조건 응용 -> add 실행");
aList.add(2,new Student("김사랑",100));
System.out.println(aList); // [아이유(100점), 손예진 결혼(100점), 김사랑(100점)]
}
// 지네릭<String>과 일반 참조객체<Student>의 오버라이딩 비교
// equals메소드와 해쉬코드가 오버라이딩 되지 않으면 주소값이 달라 없는걸로 나옴. 현재는 오버라이딩된 상태
// clear():void
aList.clear();
System.out.println(aList); // []
// isEmpty():boolean
aList.isEmpty();
System.out.println(aList.isEmpty()); // true
}