Я не знаком с компаратором по умолчанию в Java, но очевидно, что Comparator для сравнения часто является просто оболочкой.
В стандартном API нет общего понятия «естественного упорядочения», хотя некоторые встроенные типы, такие как числа, имеют реализацию CompareTo, которая затем становится их естественным упорядочением.
TreeMap
и TreeSet
, и все это должно вызвать исключение RuntimeException, если объект, который вы вставляете, не реализует Comparable.Таким образом, например, вы можете добавить строки или числа, но не другую коллекцию.
Код TreeMap
не использует компаратор, если он недоступен - вместо него используется compareTo
.Чтобы использовать compareTo
, выполняется приведение к Comparable
, который является источником исключений.
private int compare(K k1, K k2) {
return (comparator==null ? ((Comparable <K>)k1).compareTo(k2)
: comparator.compare((K)k1, (K)k2));
}