Предположим, что у меня есть TreeMap
c типом Object
у ключа и значения. Я хочу положить в TreeMap
Object
:
TreeMap<Object, Object> treeMap = new TreeMap();
treeMap.put(new Object(), new Object());
Данный код выдаст ошибку:
java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.Comparable
в методе
final int compare(Object k1, Object k2) {
return comparator==null ? ((Comparable<? super K>)k1).compareTo((K)k2)
: comparator.compare((K)k1, (K)k2);
}
который находится внутри TreeMap
.
Я понимаю, что если вместо Object
возьму String
, Integer
или любой другой тип, то всё будет нормально. Почему не проходит с Оbject
-ом?
TreeMap - коллекция, которая реализует внутри себя красно-черное дерево. Для этой структуры обязательно, чтобы ключи можно было сопоставить между собой(больше, меньше и эквивалентно). Поэтому для того чтобы положить какой-то объект внутрь, необходимо выполнить одно из условий:
В вашем же случае класс Object пытаются привести к Comparable, и программа на этом падает, т.к. это невозможно. String, Integer, Double и много еще каких классов из стандартной библиотеки уже реализуют этот интерфейс, и поэтому с ними всё отрабатывает.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Получаю ошибку вида 406 not acceptableИспользую spring boot и gradle В контролере
Метод, который занимается выводом данных работает нормально, но не получается вывести список на jsp