정렬?
Comparable 기본 정렬기준을 구현하는데 사용. Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용 |
Comparable(오름차순 정렬)
정렬을 할때 Arrays.sort()를 호출하면 알아서 정렬이 되는것처럼 보이지만.
Character클래스의 Comparable
인터페이스의 구현에 의해 정렬된다.
기본적으로 오름차순 으로 정렬되도록 구현되어 있다.
String[] strArr = {"cat", "Dog", "lion", "tiger"};
Arrays.sort(strArr); // String의 Comparable구현에 의한 정렬
System.out.println("strArr = " + Arrays.toString(strArr));
strArr = [Dog, cat, lion, tiger]
Comparator(기타 기준 정렬)
Comparable을 구현한 클래스들은 기본적으로 오름차순으로 정렬되어 있다
만약 내림차순이나 다른 기준에 의해 정렬되게 하고 싶다면
Comparator
를 구현해서 정렬기준을 제공하면 된다
꼭 구현을 하지 않아도 이미 구현되어 있는 기능들도 있다.
String[] strArr = {"cat", "Dog", "lion", "tiger"};
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분 안함
System.out.println("strArr = " + Arrays.toString(strArr));
Arrays.sort(strArr, Comparator.reverseOrder()); // 역순으로 정렬함
System.out.println("strArr = " + Arrays.toString(strArr));
strArr = [cat, Dog, lion, tiger]
strArr = [tiger, lion, cat, Dog]
종류 | 설명 |
Comparator.naturalOrder() | 오름 차순으로 정렬(작은 값에서 큰 값으로) |
Comparator.reverseOrder() | 내림 차순으로 정렬(큰값에서 작은 순으로) |
String.CASE_INSENSITIVE_ORDER | 대소문자 구분 안하고 오름 차순으로 정렬 |
Collections.sort(list, new ValueComparator());
static class ValueComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Map.Entry && o2 instanceof Map.Entry) {
Map.Entry e1 = (Map.Entry)o1;
Map.Entry e2 = (Map.Entry)o2;
int v1 = ((Integer)e1.getValue());
int v2 = ((Integer)e2.getValue());
return v2 - v1;
}
return -1;
}
}
댓글