Today I Learned
(24.05.20)[6주차] compare, compareTo 메서드 비교 & 사용자 정의 Comparator 활용
Spring 숙련 주차에 들어섰기 때문에 이번주에도 역시 5주차와 같이 숙련주차에서 심화 되는 내용을 정리하고
복습하고 예습을 블로그 TIL을 통해서 할 예정
오늘은 CODE KATA에서 좋은 Comparator 활용 예시를 할 기회가 생겼기 때문에 이 부분도 그냥 넘어가지 않고
한번더 찾아서 공부하면서 정리했다.
CODE KATA
compare, compareTo 비교 & 사용자 정의 Comparator 활용
더보기
import java.util.*;
import java.util.ArrayList;
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = {};
ArrayList<String> stringsList = new ArrayList<>(Arrays.asList(strings));
Collections.sort(stringsList, new Comparator<String>(){
@Override
public int compare(String string1, String string2) {
// n번쨰 인덱스에 대한 비교
char char1 = string1.charAt(n);
char char2 = string2.charAt(n);
if (char1 != char2){
return Character.compare(char1, char2);
} else {
return string1.compareTo(string2);
}
}
} );
answer = stringsList.stream().toArray(String[]::new);
return answer;
}
}
- strings 배열의 String 타입 인덱스 값들의 n번 인덱스끼리 알파벳을 비교해서 정렬하되, 같을 경우는 String의 사전의 값에 의한 정렬
- Collections.sort(배열, Comparator.reverseOrder()) 처럼 Comparator 클래스에 이미 정의된 메서드가 아닌 사용자 정의의 기준을 사용해서 Comparator를 사용하는 연습
- IntelliJ의 자동 완성이 되는 부분을 찾으면서 분석
Comparator 사용
- 위의 코드에서 Collections.sort() 메서드 내 사용자 정의 Comparator를 만들어야 하기 때문에 새로운 Comparator 객체를 만들어 적용해야. 따라서 new Compararator로 새로운 객체 생성 필수
- <String> Generics에 관해서 컴파일러가 안정성을 보장하지 못한다고 계속 오류가 발생해서 무조건 써줬어야함
- 배열의 값에 뭐가 올지도 모르고 따라서, Unchecked Exception인 RuntimeException이 발생할 가능성이 매우 높기 때문에 반드시 안정성을 위해 추가 -> 그냥 한 묶음으로 사용하도록
- 새로운 클래스를 파서, 거기에 새로운 Comparator 객체를 만들고 compare에 대한 메서드를 오버라이드해서 새롭게 정의를 할 수도 있으나, new Comparator<다루는 타입=지네릭스>() {내용} 통째로 넣을 수 있음
Compare & CompareTo 분석
- Compare과 CompareTo는 각각 Comparator과 Comparable 인터페이스를 이루는 메서드로 기존 학습때는 반드시 오버라이드를 해야한다고 학습
- 단, 위 코드에서는 각각 Character 클래스, String 클래스에 각각 Comparator와 Comparable이 이미 구현되어 있기 때문에 바로 사용이 가능한것!!
- Character클래스에 compareTo가 구현이 되어있지만, pirmitive type일 경우엔 직접 char1.compareTo(char2) 처럼 직접 가져와서 쓸수 없음!!!!(String일 경우엔 primitive가 아닌 참조형이기 때문에 바로 사용)
- String크래래스에는 compare메서드가 굳이 구현이 되어있지 않음!! (인덱스값이 같으면 String자체를 비교를 해야하므로 Sting클래스의 compareTo를 사용해서 자체 사전적으로 정의를 할 수 있도록 코드)
비가 너무 많이와서 컨디션이 너무 최악인데, 그래도 콜라와 커피의 카페인으로 버텨보기.!
'Today I Learned' 카테고리의 다른 글
(24.05.22)[6주차] Spring 숙련 강의 02 (0) | 2024.05.22 |
---|---|
(24.05.21)[6주차] Spring 숙련 강의 01 (0) | 2024.05.21 |
(24.05.18)[5주차] WIL (0) | 2024.05.18 |
(24.05.17)[5주차] Spring 입문 마무리(SpringBoot JPA @ExceptionalHandler) (0) | 2024.05.17 |
(24.05.16)[5주차] Spring 입문 강의 02 (0) | 2024.05.16 |