(JAVA) Comparable, Comparator
Comparable
Arrays.sort()는 Primitive Type이나 Object Type의 Array를 정렬할 때 쓰인다.
Collection.sort는 Collection의 List를 정렬할 때 쓴다.
기본적으로 둘다 오름차순 정렬이고 인자로서 Array이나 List를 넣어주면 객체의 내용의 순서가 바뀐다.
그리고 숫자뿐만 아니라 문자열도 이와같은 방법으로 정렬된다.
Arrays.sort()는 내림차순은 지원하지 않으며,
Collection은 Collections.reverse()메소드를 사용하면 내림차순으로 정렬된다.
간단한 예제로 결과를 확인해 보았다. Comparable형 정렬은 기본정렬 기준으로 구현하는데 사용이 된다 영어는 abc순, 한글은 ㄱㄴㄷ순으로 자동 정렬이 된다는 말이다.
이번에는 List로 구현을 해본 정렬방식이다 위의 방식과는 다르게 제너릭을 써서 어떤 타입들이 들어가는지 지정해주고 Collections로 정렬을 했다. 이처럼 List형이지만 String으로 구성된 List는 기준점이 명확해서 comparable형으로 정렬이 가능하지만 일반 객체가 담긴 List는 여러가지 데이터를 담고 있기 때문에 어느 기준으로 정렬해줄지 몰라 Collections.sort()가 먹히지 않는다. 그래서 기준을 정해주기 위해 Comparator가 존재함.
Comparator은 기본 정렬기준 외 사용자 지정 기준으로 정렬하고자 할때 사용된다.
방식에는 직접 메인문에다 구현하는 방법과 클래스를 따로 지정해주어 사용 하는 방법 2가지가 있다.
제일 처음엔 Collections.sort(list값, new Comparator)로 밑에 어떻게 지정할 것인가 바로 정해 주는것이고 그 밑에는 미리 클래스로 지정해둔 Decending을 호출해 사용한다. 각각은 오름차순과 내림차순으로 다른 결과가 보이도록 설정했다.
위에 것과 비슷하며 단지 클래스로 따로 만들어서 쓰는것이다.
위 코드를 살짝 분석하자면 o2가 o1보다 크면 참이다(1,뒤다) o1이 o2보다 크면 거짓이다(-1,앞이다) 라는 느낌으로 해석가능.
o1과o2가 같으면 0을 리턴하구요
처음은 오름차순으로 정렬했고 다음에 클래스로는 내림차순으로 이름을 기준으로 구성해 보았다.