배열이나 Collection 프레임워크에서 sort()를 사용하면 컴퓨터가 알아서 정렬을 해준다.
이 때, sort()는 Comparable 구현에 의해 정렬된 것이다.
위 같은 예제가 있을 때, Arrays.sort(sports), Arrays.sort(names)는 String의 Comparable 구현에 의해 정렬된 것이다.
Comparable을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들,
즉, String, Integer, Date, File 등이 있다.
그리고 기본적으로 오름차순 형태로 구현되도록 만들어져 있다.
ArrayList로 구현을 할 때에는 Arrays.sort()가 아닌 Collection.sort()를 사용해야한다.
이번에는 사용자가 임의로 만든 객체를 정렬할 때를 확인을 해보겠다.
위와 같이 Student라는 클래스를 만들어 리스트에 넣고, 정렬하려 했으나
The method sort(List<T>) in the type Collections is not applicable for the arguments
에러로 인해 실행이 되지 않는다.
에러가 나는 이유는 Collection의 sort 메소드가 정렬을 위한 기준을 찾을 수 없기 때문이다.
정렬 기준을 명시하기 위한 방법으로는
1. Comparable 인터페이스 구현
2. Comparator 구현 두가지가 있다.
- Comparable 인터페이스를 구현하여 정렬
Student 클래스에 Comparable<T> 인터페이스를 implements 해준다.
그리고 Comparable 인터페이스에 있는 compareTo 메소드를 오버라이드 해줘야한다.
compareTo는
현재 멤버 변수 < 파라미터로 넘어온 값 >> 음수 리턴
현재 멤버 변수 = 파라미터로 넘어온 값 >> 0 리턴
현재 멤버 변수 > 파라미터로 넘어온 값 >> 양수 리턴
하도록 작성해준다.
- Comparator 구현
Collections.sort 메소드는 두 번째 인자로 Comparator 인터페이스를 받을 수 있도록 한다.
Comparator 인터페이스의 compare 메소드를 오버라이드 하면 된다.
compare 메소드는 Comparable의 compareTo 메소드와 동일한 규칙으로 작성하면 된다.
'나만의 정리' 카테고리의 다른 글
[Java]Comparable, Comparator 정리(+ 자료형) (0) | 2018.11.19 |
---|---|
[Intellij] 인텔리제이 단위 테스트 해보기 (JUnit) (0) | 2018.09.13 |
자바 상속(extends), 추상클래스(abstract), 인터페이스(implements) 개념정리 (0) | 2018.07.12 |
자바 접근 지정자 (0) | 2018.07.11 |
StringBuffer를 사용하는 이유 (0) | 2018.06.29 |
댓글