■ Java Comparator & Comparable
- 객체의 정렬 기준을 제공하는 Interface로, Comparator, Comparable을 이용하여 객체를 정렬할 수 있다.
• Comparator Interface
- 정렬하는 규칙을 정의하는 Interface
- 정렬 규칙이 여러 군데에 사용된다면 Interface를 구현한 클래스를 구현하지만, 한 번씩만 사용된다면 익명 내부 클래스 또는 람다식을 이용하여 구현한다.
- 일반적으로 String, Integer 등 Java에서 제공하는 타입에 대해서는 Comparator을 사용한다.
* Integer, Double : 오름차순 정렬
* String : 사전 순 정렬
- compare(T o1, T o2) 메서드
1) 오름차순 정렬
a. o1이 o2 보다 작은 경우, 음수 값을 return
b. o1과 o2가 같은 경우, 0을 return
c. o1이 o2 보다 큰 경우, 양수 값을 return
2) 내림차순 정렬
=> 오름차순과 반대로 return 해주면 된다.
class ComparatorTest implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.substring(1).compareTo(o2.substring(1));
}
}
class Test{
public static void main(String[] args) {
String[] test = {"Java", "Study", "Yoon", "Church"};
Arrays.sort(test);
System.out.println(Arrays.toString(test));
// 1. Comparator 구현
Arrays.sort(test, new ComparatorTest());
System.out.println(Arrays.toString(test));
// 2. 익명 내부 클래스
Arrays.sort(test, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.substring(2).compareTo(o2.substring(2));
}
});
System.out.println(Arrays.toString(test));
// 3. Lambda 구현
Arrays.sort(test,(o1, o2) -> o1.substring(3).compareTo(o2.substring(3)));
System.out.println(test);
}
}
* Collection Sort의 경우, Collection.sort()를 이용하여 Sorting 한다.
• Comparable Interface
- 구현한 Class에 비교할 수 있는 기능을 추가하는 Interface
- Java에서 제공하지 않고, 개발자가 구현한 Class에 정렬 기능을 추가할 때 사용한다.
- compareTo(T o)
1) 오름차순 정렬
a. this 가 o 보다 작은 경우, 음수 값을 return
b. this 와 o 가 같은 경우, 0을 return
c. this 가 o 보다 큰 경우, 양수 값을 return
2) 내림차순 정렬
=> 오름차순과 반대로 return 해주면 된다.
class Test{
public static void main(String[] args) {
// Comparable
class ComparableTest implements Comparable<ComparableTest>{
String value;
public ComparableTest(String value) {
this.value = value;
}
@Override
public int compareTo(ComparableTest o) {
return value.substring(1).compareTo(o.value.substring(1));
}
@Override
public String toString() {
return value.toString();
}
}
ComparableTest[] test = {new ComparableTest("Java"), new ComparableTest("Study"), new ComparableTest("Yoon")};
Arrays.sort(test);
System.out.println(Arrays.toString(test));
}
}
'Coding > Java' 카테고리의 다른 글
java.lang 패키지 (0) | 2020.09.29 |
---|---|
Java Stream API (0) | 2020.09.28 |
Java Lambda Expression(람다식) (0) | 2020.09.18 |
Java Inner Class(내부 클래스) (0) | 2020.09.18 |
Java Handling Exception(예외 처리) (0) | 2020.09.17 |