관리 메뉴

개발하는 동그리

[Java]컬렉션 프레임워크 Comparator & Comparable 본문

IT 정보/Java

[Java]컬렉션 프레임워크 Comparator & Comparable

개발하는 동그리 2022. 5. 16. 23:16
반응형

Comparator & Comparable

두 가지 모두 컬렉션을 정렬하기 위해 자바에서 제공하는 인터페이스다.

  • Comparator : 비교대상(매개변수)와 자기 자신을 비교한다.
  • Comparable : 매개 변수인 두 객체를 비교한다. 

Comparable 인터페이스

compareTo() 메서드를 사용해 객체를 정렬한다. 
Integer 와 String, File, Data와 같은 클래스에서는 자체적으로 Comparable 인터페이스를 구현하여 인스턴스 간 크기를 비교하고 있다. !? 무슨말이야!!!!!!!!!!!!!!!!!!!!!!!


compareTo()에서 비교하는 두 객체가 같으면 0, 비교할 객체가 주어진 객체보다 작으면 음수, 크면 양수를 반환한다.

import java.util.*;

class Employee implements Comparable<Employee>{
    int id;
    String name,department;

    public Employee(int id, String name, String department) {
        this.id = id;
        this.name = name;
        this.department = department;
    }

    @Override //오버라이딩을 강제하기 위한 애너테이션입니다.
    public int compareTo(Employee employee) {
        if(id > employee.id) {
            return 1;
        } else if(id < employee.id){
            return -1;
        } else {
            return 0;
        }
    }
}

public class ComparableExample {
    public static void main(String[] args) {
        Set<Employee> person = new TreeSet<>();

        Employee employee1 = new Employee(5,"Kim","banana");
        Employee employee2 = new Employee(8,"Hwang","apple");
        Employee employee3 = new Employee(15,"Park","melon");

        person.add(employee1);
        person.add(employee2);
        person.add(employee3);

        for(Employee employee:person){
            System.out.println(employee.id+" "+employee.name+" "+employee.department+" ");
        }
    }
}

넣은 순서와 관계 없이 compareTo() 메서드가 정의해준 대로 정렬되어 출력된다.


Compare() 메서드

기본 정렬 기준이 아닌 다른 정렬 기준으로 사용하고 싶을 때에 메서드를 재정의(오버라이딩) 한다. 

정렬할 때에는 반드시 매개변수로 정렬 기준을 제공하거나, 대상 객체에 자체적으로 정렬 기분이 구현되어 있어야 한다. 

반응형