HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Java
Java
/
💯
Java 기본
/활용 (API)/
Comparator와 Comparable(Java에서 비교 정렬)

Comparator와 Comparable(Java에서 비교 정렬)

Interface Comparable

class Rank implements Comparable<Rank>{ public String rank; public int vote; Rank(String rank, int vote){ this.rank = rank; this.vote = vote; } @Override public int compareTo(Rank o) { int ret = (-1) * Integer.compare(this.vote, o.vote); if(ret!= 0) return ret; ret = this.rank.compareTo(o.rank); return ret; } } List<Rank> list1 = new ArrayList<>(); list1.add(new Rank("A", 0)); list1.add(new Rank("B", 1)); list1.add(new Rank("C", 3)); list1.add(new Rank("D", 1)); Collections.sort(list1);
  • compareTo() 메서드 작성법
    • 현재 객체 < 파라미터로 넘어온 객체: 음수 리턴
    • 현재 객체 == 파라미터로 넘어온 객체: 0 리턴
    • 현재 객체 > 파라미터로 넘어온 객체: 양수 리턴
    • 음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.
  • implements Comparable<Rank> — Comparable을 구현할 때 일반적으로 따르는 패턴임. Rank의 참조는 Rank 참조와만 비교할 수 있다는 의미

Interface Comparator

List<Rank> list1 = new ArrayList<>(); list1.add(new Rank("A", 0)); list1.add(new Rank("B", 1)); list1.add(new Rank("C", 3)); list1.add(new Rank("D", 1)); Comparator<Rank> rankComparator = Comparator.comparing(Rank::getVote).reversed() .thenComparing(Rank::getRank, String::compareTo); list1.sort(rankComparator);
  • Comparable을 구현하지 않은 필드나 표준이 아닌 순서로 비교해야 할 때 사용함
  • 메서드 체이닝 형태로 Comparator 정의 가능함