백준 1181 문제를 푸는데 Arrays.sort에 Comparator를 재정의하면 내가 원하는 조건으로 정렬 할 수 있다는 걸
알게되어 한번 정리해보겠다 !!
Arrays.sort() 는 기본적으로 2가지 인자를 받는다.
Array.sort(arr, new Comparator <>)
Array.sort(arr) 이런 식으로 인자를 1개만 줄 경우 Comparator은 default값으로 적용되어 실행이 되는 것이다.
(정수 정렬할 때는 default값으로 해도 상관없음!)
그러나 문자열을 정렬하기 위해서는 따로 재정의가 필요함
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if(s1.length() == s2.length()) {
return s1.compareTo(s2);
}else {
return s1.length() - s2.length();
}
}
});
String 배열을 문자열 길이가 짧은 순서대로 정렬하는데 길이가 같을 경우 compareTo함수를 사용해 문자열 크기가 큰 순으로 정렬하는 코드
> Comparator에 있는 메서드인 compare 오버 라이딩하기
(오버 라이딩이란, 이미 기존에 있는 Comparator에서 인터페이스로 정의되어있는 함수를 재정의하는 기술)
: String s1, s2 파라미터는 항상 두개! 비교해야하니까
> 문자열의 길이 정렬하기
해당 메서드의 반환 값은 양수, 음수로 판단하여 정렬을 하기 때문에 해당 반환 값이 양수면 s1이 큰 값이 됩니다.
> 문자열 길이가 같다면 사전 순으로 정렬하기
조건문으로 길이가 같음을 판별해주고 compareTo를 통해서 해당 문자열을 쉽게 정렬할 수 있다.
compareTo() : 문자열의 사전순을 값을 비교하여 그에 해당되는 return 값 반환
동일한 경우 0 반환
좌측의 값이 더 큰 경우 1 반환
우측의 값이 더 큰 경우 -1 반환
> 중복 제거하여 출력
System.out.println(arr[0]);
for(int i = 1; i < num; i++) {
if (!arr[i].equals(arr[i - 1])) {
System.out.println(arr[i]);
}
}
'뚝딱뚝딱 > Java' 카테고리의 다른 글
[Java] 자바의 정석 Chapter1 ~ Chapter5 (0) | 2022.05.13 |
---|---|
[Java] assertThat 비교 #JUnit #Assertj (0) | 2022.01.19 |
[Java] Stream이 뭐야! (0) | 2022.01.18 |
[Java] interface, abstract 공부 (0) | 2022.01.18 |
[Java] 클래스 멤버, 인스턴스 멤버 (0) | 2022.01.18 |