728x90
Interface Comparable<T>
Modifier and Type | Abstract Method | Description |
int | compareTo(T o) ★ | 현재 개체와 전달받은 개체를 비교하여 순서 지정 * 자기 자신이 더 크면 양수 반환, 인수가 더 크면 음수 반환 * 콜백 메서드 ( Callback Method ) ( 프로그래머가 작성하지만 시스템이나 자바 컬렉션 프레임워크가 호출하는 메서드 ) |
( https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html )
예시
더보기
import java.util.*;
public class SortEx_Comparable {
static class Node implements Comparable<Node> {
int val;
public Node(int val) {
this.val = val;
}
@Override
public int compareTo(Node o) {
return this.val - o.val; // 오름차순
//return o.val - this.val; // 내림차순
}
@Override
public String toString() {
return "Node [val=" + val + "]";
}
}
public static void main(String[] args) {
List<Node> ls = new ArrayList<>();
ls.add(new Node(5));
ls.add(new Node(8));
ls.add(new Node(2));
Collections.sort(ls);
System.out.println(ls);
Set<Node> ts = new TreeSet<>();
ts.add(new Node(5));
ts.add(new Node(8));
ts.add(new Node(2));
System.out.println(ts);
}
}
Interface Comparator<T>
Modifier and Type | Abstract Method | Description |
int | compare(T o1, T o2) ★ | 전달받은 두 개체를 비교 * 첫 번째 인수가 더 크면 양수 반환, 두 번째 인수가 더 크면 음수 반환 * String 클래스는 Comparable 인터페이스를 이미 구현했고 final로 선언되었다. 따라서 compareTo() 메서드를 사용할 수 없는데, 이 때 사용 |
( https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html )
예시
더보기
import java.util.*;
public class SortEx_Comparator {
static class Node {
int val;
public Node(int val) {
this.val = val;
}
@Override
public String toString() {
return "Node [val=" + val + "]";
}
}
public static void main(String[] args) {
// [way 1]
Comparator<Node> comparator = new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
return o1.val - o2.val; // 오름차순
//return o2.val - o1.val; // 내림차순
}
};
// [way 2]
comparator = (o1, o2) -> {
return o1.val - o2.val; // 오름차순
//return o2.val - o1.val; // 내림차순
};
// [way 3]
comparator = (o1, o2) -> (o1.val - o2.val); // 오름차순
// (o2.val - o1.val)); // 내림차순
List<Node> ls = new ArrayList<>();
ls.add(new Node(5));
ls.add(new Node(8));
ls.add(new Node(2));
Collections.sort(ls, comparator);
System.out.println(ls);
Set<Node> ts = new TreeSet<>(comparator);
ts.add(new Node(5));
ts.add(new Node(8));
ts.add(new Node(2));
System.out.println(ts);
}
}
반응형