Comparable, Comparator
Comparable, Comparator
데이터를 정렬할 때 사용하는 인터페이스
Comparable: “비교 할 수 있는” 이라는 뜻Comparator: “비교자” 라는 뜻
주요 메서드
1
2
3
public interface Comparable<T> {
public int compareTo(T o);
}
1
2
3
public interface Comparator<T> {
int compare(T o1, T o2);
}
객체 정렬
Comparable를 상속받은 객체는 정렬이 가능합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MyUser implements Comparable<MyUser> {
private String id;
private int age;
public MyUser(String id, int age) {
this.id = id;
this.age = age;
}
@Override
public int compareTo(MyUser o) {
return Integer.compare(this.age, o.age);
}
@Override
public String toString() {
return "MyUser{" +
"id='" + id + '\'' +
", age=" + age +
'}';
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class SortMain3 {
public static void main(String[] args) {
MyUser myUser1 = new MyUser("a", 30);
MyUser myUser2 = new MyUser("b", 20);
MyUser myUser3 = new MyUser("c", 10);
MyUser[] array = {myUser1, myUser2, myUser3};
System.out.println("기본 데이터");
System.out.println(Arrays.toString(array));
System.out.println("Comparable 기본 정렬");
Arrays.sort(array);
System.out.println(Arrays.toString(array));
}
}
- 정렬 할 때
Comparator을 넘겨 정렬 할 수도 있습니다.
1
2
3
4
5
6
7
public class IdComparator implements Comparator<MyUser> {
@Override
public int compare(MyUser o1, MyUser o2) {
return o1.getId().compareTo(o2.getId());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class SortMain3 {
public static void main(String[] args) {
MyUser myUser1 = new MyUser("a", 30);
MyUser myUser2 = new MyUser("b", 20);
MyUser myUser3 = new MyUser("c", 10);
// 오름차순 정렬
System.out.println("IdComparator 정렬");
Arrays.sort(array, new IdComparator());
System.out.println(Arrays.toString(array));
// 내림차순 정렬
System.out.println("IdComparator().reversed() 정렬");
Arrays.sort(array, new IdComparator().reversed());
System.out.println(Arrays.toString(array));
}
}
List는sort()메서드를 제공합니다.
TreeSet에 객체를 담을 때에는 순서를 알 수 없으므로Comparator를 생성자로 넘겨 정렬 순서를 알려주어야 합니다.
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.