Comparable / Comparator

KIHYUK MOON·2023년 2월 2일
0
post-thumbnail
post-custom-banner

Comparable과 Comparator는 클래스에 대한 정렬을 구현할 수 있도록 해주는 인터페이스이다

Comparable<>

Comparable 인터페이스는 객체를 정렬하는데 사용되는 메소드인 compareTo() 메소드를 정의한다.
자기 자신과 전달받은 매개변수를 비교하는 인터페이스이다.

public class CarComp implements Comparable<CarComp>{
    public String modelName;
    public int modelYear;
    public String color;

    public CarComp(String modelName, int modelYear, String color) {
        this.modelName = modelName;
        this.modelYear = modelYear;
        this.color = color;
    }

    @Override
    public int compareTo(CarComp obj) {
        if(this.modelYear == obj.modelYear) return 0;
        else if(this.modelYear < obj.modelYear) return -1;
        else return 1;
    }
}

package Comparable;
import java.util.Iterator;
import java.util.TreeSet;

public class Main {
    public static void main(String[]args) {
        TreeSet<CarComp> arrList = new TreeSet<>();
        arrList.add(new CarComp("싼타페", 2016, "흰색"));
        arrList.add(new CarComp("쏘렌토", 2012, "은색"));
        arrList.add(new CarComp("그랜저", 2018, "은색"));

        Iterator<CarComp> iterator = arrList.iterator();
        while(iterator.hasNext()) {
            CarComp car = iterator.next();
            System.out.println(car.modelName + ":" + car.modelYear);
        }
				//for(CarComp e : arrList) {
        //    System.out.println(e.modelName + ":" + e.modelYear);
        //}
    }
}

Comparator<>

Comparator 역시 정렬을 구현할 때 사용하는 인터페이스이다.
사용할 때 compare()메소드를 구현해야 한다.

public class Main {
    public static void main(String[] args) {
        TreeSet<Fruit> treeSet = new TreeSet<>(new DescendingComparator());
        treeSet.add(new Fruit("포도", 3000));
        treeSet.add(new Fruit("수박", 10000));
        treeSet.add(new Fruit("딸기", 6000));
        Iterator<Fruit> iterator = treeSet.iterator();
        while(iterator.hasNext()) {
            Fruit fruit = iterator.next();
            System.out.println(fruit.name + ":" + fruit.price);
        }
    }
}
public class Fruit {
    public String name;
    public int price;

    public Fruit(String name, int price) {
        this.name = name;
        this.price = price;
    }
}
public class DescendingComparator implements Comparator<Fruit> {
    @Override
    public int compare(Fruit o1, Fruit o2) {
        if(o1.price < o2.price) return 1;
        else if(o1.price == o2.price) return 0;
        return -1;
    }
}
profile
개발자 전직중..
post-custom-banner

0개의 댓글