원시타입과 Object 타입의 차이
웬만하면 Object타입쓰자
stable: 앞에서 나온 놈이 앞으로간다.
Object타입이 최악이 NlogN이니깐 무조건 유리한거 아닌가 싶지만
평균적인 속도가 같은 NlogN이더라도 퀵소트가 보통의 상황에서 더 빠른 NlogN이다.
또한 추가적인 메모리를 쓰지 않아서 각각의 장단점이 있다.
Arrays.sort()는 원시타입과 Object타입으로 나뉜다.
Collections.sort()는 리스트를 정렬하며 원시타입 배영보다 성능이 더욱 좋다.
Array.sort()는 기본적으로 오름차순이다.
내림차순으로 하려면 아래와 같이 하면 된다.
원시타입의 경우 함수자체에 내림차순 기능이 없다.
쉽게 생각하면
return 값이 양수이면 지금 순서 그대로, 음수이면 순서를 바꾼다고 외우면 된다. 0이면 stable하게 그대로
true이면 바꾼다.!!
아니면 o1-o2가 오름차순이라는 것을 외우자. 그리고 class1.compareTo(class2)는 class1이 앞에 오는게 오른차순이다. ex)string1.compareTo(string2)
Comparator함수를 lambda로도 쓸 수 있다.
Comparator는 compare함수만 가지는 인터페이스이다.
이를 해결하기 위한 두가지 방법
1. Comparable Interface 구현
compartTo는 compare함수와 동일한 역할을 하지만, 나와 쟤를 비교하는 것이다. 클래스안에 속해지는 함수이다,.
비교가 반복적이로 일어난다면 구현하는 것이 좋다.
코테가 아닌 경우에 클래스 구현에서 정렬기능이 클래스에서 중요할 때 사용하면 굿
2. Comparator 사용
compareTo로 비교하면 같은 값일 경우 다음 비교(여기선 이름비교)를 하지 않는다. 그렇기에 (나이가) 같으면 (이름으로)다른걸로 비교를 한다면 최종비교(이름)에만 compareTo함수를 불러와서 비교해야한다.
이또한 람다로 구현가능하다.
일회용일 경우 많이 씀.
코테에서는 이 방법 많이 씀
'Problem Solving > 자바 문법' 카테고리의 다른 글
Collections 시간복잡도 정리 (1) | 2024.02.06 |
---|---|
HashMap vs LinkedHashMap (0) | 2024.02.06 |
자료형 선언시 기본값 (0) | 2024.01.31 |
진수 바꾸기 (0) | 2024.01.30 |
배열 선언과 동시에 값 넣기 (0) | 2024.01.30 |