Столкнулся недавно с этими двумя интерфейсами, интересны различия.
В интерфейсе Comparable находится метод compareTo, который возвращает отрицательное число если текущий объект меньше и , соответственно, положительное число, если текущий объект больше того, который передаётся через параметр.
В интерфейсе Comparator находится куча разных методов, но как правило используется compare. Этот метод аналогичный первому, только принимает 2 аргумента.
public class MyClass implements Comparable, Comparator {
int value;
public MyClass(){}
public MyClass(int val){
value = val;
}
@Override
public int compareTo(MyClass o) {
return this.value - o.value;
}
@Override
public int compare(MyClass o1, MyClass o2) {
return o1.value - o2.value;
}
}
public class Main {
public static void main(String[] args) {
MyClass mc = new MyClass(6);
MyClass mc2 = new MyClass(9);
System.out.println(mc.compareTo(mc2));
MyClass mc3 = new MyClass();
System.out.println(mc3.compare(mc,mc2));
}
}