Объясните как работает 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, то второе перед первым. В одном случае получится возрастающая сортировка, в другом убывающая.