Comparable과 Comparator는 클래스에 대한 정렬을 구현할 수 있도록 해주는 인터페이스이다
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 역시 정렬을 구현할 때 사용하는 인터페이스이다.
사용할 때 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;
}
}