포스트

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));
  }
}

Listsort() 메서드를 제공합니다.

TreeSet에 객체를 담을 때에는 순서를 알 수 없으므로 Comparator를 생성자로 넘겨 정렬 순서를 알려주어야 합니다.

참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.