Объясните как работает compare() в порядке возрастания и убывания

можете объяснить, пожалуйста как работает метод compare() в данном коде?

import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

class MyComp implements Comparator<String>{
    
    @Override
    public int compare(String a, String b) {
        String aStr, bStr;
        aStr = a;
        bStr = b;
        return bStr.compareTo(aStr);
    }
}


public class TreeTest {
    public static void main(String[] args) {
        TreeSet<String> ts = new TreeSet<String>(new MyComp());
        ts.add("A");
        ts.add("C");
        ts.add("D");
        ts.add("B");
        
        for(String elem : ts) {
            System.out.print(elem + " ");
        }
        System.out.println();
        
    }
}

Почему если в методе compare() возвращать return aStr.compareTo(bStr); то коллекция будет сортироваться в порядке возрастания, а если return bStr.compareTo(aStr);, то в порядке убывания?


Ответы (1 шт):

Автор решения: Эникейщик

Потому что упрощено говоря aStr.compareTo(bStr) равно -bStr.compareTo(aStr). Т.е. если aStr.compareTo(bStr) возвращает 1, то bStr.compareTo(aStr) вернёт -1. Поэтому и сортировка производится в обратную сторону.

Пример на числах: допустим в функцию сравнения (не эту, но похожую) передается два числа a и b. Если функция возвращает 1, то мы первое число ставим перед вторым. Если же -1, то второе перед первым. В одном случае получится возрастающая сортировка, в другом убывающая.

→ Ссылка