728x90
제네릭(Generic) 안에 String Class와 사용자정의 클래스의 차이에 대해 분명하게 인식하게 됨
String Class는 equals(), toString() 같은 것들이 내부적으로 포함이 되어있어 없어도 되지만
일반 사용자정의 클래스의 경우 해주지 않으면 객체는 주소값으로 저장&연결 되기 때문에 값 비교가 안된다는 것
간단하게 쓰고 싶고 데이터타입이 str이라면 ArrayList에서 String을 제네릭으로 지정해서 사용하면 된다. 또는 곧 할 Map에서 키 밸류 받을 때 제네릭 매개변수에 2개가 들어가는데 그 중 하나로 써도 좋다
addAll에 들어가는 컬렉션 타입도 변수를 넣어서 더하고 더해서 많이 익숙해져서 컬렉션을 담은 변수랑 변수끼리 합치는 식으로 컬렉션끼리 안에 값을 합치는 것도 익숙해진 상태
/******************************** collection 6th practice ***************************************/
public void method06() {
// 연습할 거 포인트
// 오버라이딩 해제하면서 toString(), equals()와 hashCode() 비교
// 반환 타입(boolean,int등)에 따라 if,for,while문 조건식에 뭔가 응용해보기
// 반환 받은 객체로는 뭘 해볼 수 있을까? ==나 equals() 사용해서 해당 str 값이 있으면 if문 써봐도 될 듯
// toString(), equals(), hashCode() 3개 코드 직접 써보기
// vo클래스에 있는 오버라이딩된 toString(), equals(), hashCoding()
// 전부 주석처리
ArrayList<Student> list1 = new ArrayList<>(2);
ArrayList<Student> list2 = new ArrayList<Student>(2);
ArrayList<Student> list3 = new ArrayList<>(1);
// add(E e):boolean
// add(int index, E element)
// Object의 toString()를 오버라이딩 때문에 주소값이 아닌 객체값이 바로나옴
list1.add(new Student("zero",100));
list1.add(0,new Student("0",0));
list2.add(new Student("ㄱ",100));
list2.add(1,new Student("ㄴ",100));
System.out.println(list1); // [zero(0점), a(100점)]
System.out.println(list2); // [ㄱ(100점), ㄴ(100점)]
// addAll(Collection<? extends E> c) : boolean
// list3.addAll(list1).addAll(list2); 메소드 체이닝 작동x
list3.addAll(list1);
list3.addAll(list2);
System.out.println(list3); // [0(0점), zero(100점), ㄱ(100점), ㄴ(100점)]
// addAll(int index, Collection c) : boolean
list3.addAll(1,list1);
System.out.println(list3); // [0(0점), 0(0점), zero(100점), zero(100점), ㄱ(100점), ㄴ(100점)]
System.out.println(list3.addAll(4, list2)); // true
System.out.println(list3); // [0(0점), 0(0점), zero(100점), zero(100점), ㄱ(100점), ㄴ(100점), ㄱ(100점), ㄴ(100점)]
// 장점1. 크기 제약 x
// 장점2. 추가/삭제/정렬 기능처리 간단
// .size() : 인덱스 길이 반환
System.out.println(list3.size()); // 8
if(list3.size() >= 5) {
System.out.println("아메리카노 1잔 주문"); // 아메리카노 1잔 주문
}
// 삭제
// remove(int index):E
// // remove()의 return은 삭제한 값을 돌려준다
// list.remove(7);
list3.remove(7); // 끝에 ㄴ 지우기
System.out.println(list3); // [0(0점), 0(0점), zero(100점), zero(100점), ㄱ(100점), ㄴ(100점), ㄱ(100점)]
System.out.println(list3.remove(6)); // ㄱ(100점) <- 지운 값 반환
// 삭제
// remove(Object o):boolean
// 같은 데이터라면 앞에 있는거부터 삭제
// equals()가 오버라이딩이 안되어 있어서 값 비교가 아니라 주소값 비교라 삭제 못한 것.
System.out.println(list3); // [0(0점), 0(0점), zero(100점), zero(100점), ㄱ(100점), ㄴ(100점)]
System.out.println(list3.remove(new Student("ㄴ",100))); // false
// VO class equals() 적용 후, true
System.out.println(list3); // [0(0점), 0(0점), zero(100점), zero(100점), ㄱ(100점)]
// 지네릭 추가 : <String>
// toString() 오버라이딩 삭제 -> 삭제해도 String Class자체에서 가능해서 값 출력이 됨
// equals랑 hashCode가 잘 오버라이딩이 되어있기 때문에 삭제 가능
ArrayList<String> sList = new ArrayList<>(1);
sList.add(new String("a"));
sList.add(new String("b"));
sList.add(new String("c")); // 초기 지정길어 넘어서 길이 자동추가
System.out.println(sList); // [a, b, c]
// set(int index, E e) : 바꾸기 전 값 반환
// 해당 인덱스 번호에 값 교체
// equals(),hashCode() 필요x
sList.set(2, new String("cc"));
System.out.println(sList); // [a, b, cc]
list2.set(1, new Student("ㄷ",100));
System.out.println(list2); // [ㄱ(100점), ㄷ(100점)]
//get(int index):E
// 인덱스번호의 엘리먼트 값을 가져온다
System.out.println(list2.get(1)); // ㄷ(100점)
System.out.println(sList.get(2)); // cc
// contains(Object) : boolean
// indexObject : int
// equals() 삭제
System.out.println(sList.contains("cc")); // true
System.out.println(list2.contains(new Student("ㄱ",100))); // false
// String Class라서 cc는 true가 나왔고, list2는 값 비교가 안되고 객체참조의 디폴트인 주소값 비교라서 false가 나옴
// equals()가 있고 다시 찍어보면 true
// 지네릭<String>과 일반 참조객체<Student>의 오버라이딩 비교
// equals메소드와 해쉬코드가 오버라이딩 되지 않으면 주소값이 달라 없는걸로 나옴. 현재는 오버라이딩된 상태
// clear():void
list2.clear();
System.out.println(list2); // []
// isEmpty():boolean
System.out.println(list2.isEmpty()); // true
}
728x90
반응형
'small steps > 1일 1코딩 - 코딩을 내 몸처럼' 카테고리의 다른 글
[1일1코딩][Web] boardDetailView 6th 댓글 script part(댓글 ajax) (0) | 2022.08.25 |
---|---|
[1일1코딩][Web] boardDetailView 5th (0) | 2022.08.24 |
[1일1코딩][Java] equals(),hashCoding(), toString(), getter & setter 손코딩 2nd (0) | 2022.08.22 |
22.08.21 운동기록 (0) | 2022.08.22 |
[1일1코딩][IDE] 인텔리제이 사용 및 익숙해지기 3rd (0) | 2022.08.21 |