Comparable vs Comparator

2025. 4. 30. 16:11·Dev Trivia
728x90

TreeSet이나 TreeMap 같은 컬렉션에 저장되는 객체는 저장과 동시에 오름차순으로 정렬

이때, 어떤 객체든 정렬될 수 있는 것이 아닌, 객체가 `Comparable` 인터페이스를 구현하고 있어야 가능함

Integer, Double, String 타입은 Comparable을 구현하고 있으므로 상관 없음

📌 사용자 정의 객체를 저장할 땐 반드시 Comparable을 구현해야 함

Comparable

comparable 인터페이스에는 `compareTo()` 메소드가 정의돼 있음
∴ 사용자 정의 클래스에서 이 메소드를 재정의하여 비교 결과를 정수 값으로 반환해야 함

리턴 타입 메소드 설명
int compareTo(T o) 주어진 객체와 같으면 0,
주어진 객체보다 적으면 음수,
주어진 객체보다 크면 양수 리턴

Comparator

비교 기능이 있는 구현체를 TreeSet에 저장하거나 TreeMap에 저장하는 게 원칙이지만,
비교 기능이 없는 (= Comparable 비구현) 객체를 저장하고 싶다면 생성 시 `비교자`를 제공하면 됨

TreeSet<E> treeSet = new TreeSet<E>(new ComparatorImpl());
  • 비교자는 `Comparator` 인터페이스를 구현한 객체를 의미
  • comparator 인터페이스에는 `compare()` 메소드가 정의돼 있음
리턴 타입 메소드 설명
int compare(T o1, T o2) o1과 o2가 동등하면 0,
o1이 o2보다 앞에 오려면 음수,
o1이 o2보다 뒤에 오려면 양수 리턴

 예제 👇🏻

더보기

1. Comparable을 구현하지 않은 Fruit 클래스

public class Fruit{
	public String name;
    public int price;
    
    public Fruit(String name, int price){
    	this.name = name;
        this.price = price;
    }
}

 2. Comparator을 구현한 FruitComparator 클래스

public class ComparatorFruit implements Comapartor<Fruit>{
	@Override
    public int compare(Fruit o1, Fruit o2){
    	return o1.price-o2.price;       
    }
}

3. Main

TreeSet<Fruit> set = new TreeSet<>(new ComparatorFruit());

보통은 Comparator를 `익명 구현 객체`나 `람다 표현식`으로 사용함

List<String> list = new ArrayList<>();

// 익명 구현 객체
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }
});

// 람다 표현식
Collections.sort(list, (o1, o2) -> o1.compareTo(o2));
728x90
'Dev Trivia' 카테고리의 다른 글
  • DNS
  • [HTML] Attribute vs Property
  • 함수 vs 메서드
0woy
0woy
Algorithm, CS, Web 등 배운 내용을 기록합니다.
  • 0woy
    0woy dev
    0woy
  • 전체
    오늘
    어제
  • 🌐 LANGUAGE
    • 분류 전체보기 (58) N
      • Backend (12) N
        • JAVA (6) N
        • DB (6) N
      • Frontend (15)
        • HTML5 (1)
        • CSS (1)
        • JS (4)
        • Vue 3 (9)
      • Computer Science (15)
        • 네트워크 (9)
        • 운영체제 (5)
      • PS (12) N
        • LeetCode (2)
        • Baekjoon (1)
        • Programmers (0)
        • 알고리즘 (9) N
      • Dev Trivia (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    set
    상속
    JDBC
    html
    javascript
    dom
    속성
    MySQL
    udp
    map
    select
    DNS
    https
    함수
    DP
    BFS
    java
    list
    JS
    function
    음의 가중치
    tcp
    트리
    HTTP
    leetcode
    view
    Props
    dfs
    그래프
    Vue3
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
0woy
Comparable vs Comparator
상단으로

티스토리툴바