728x90

 

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



}

 

728x90
반응형

+ Recent posts