Sobes.tech
Назад к вопросам
Senior
7

Можно ли любой объект добавить в TreeMap в качестве ключа?

Компании, где спрашивали
Альфа КапиталАльфа Капитал

Ответ от нейросети

sobes.tech AI

В TreeMap в Java ключи должны быть либо реализованы с интерфейсом Comparable, либо при создании TreeMap должен быть передан объект Comparator. Это необходимо, чтобы TreeMap мог упорядочивать ключи по определённому порядку.

Если объект не реализует Comparable и не передан Comparator, попытка добавить такой ключ вызовет ClassCastException во время выполнения.

Пример:

TreeMap<String, Integer> map = new TreeMap<>();
map.put("apple", 1); // работает, так как String реализует Comparable

class MyKey {}
TreeMap<MyKey, Integer> map2 = new TreeMap<>();
map2.put(new MyKey(), 1); // выбросит ClassCastException, если не передать Comparator

// Правильно с Comparator:
TreeMap<MyKey, Integer> map3 = new TreeMap<>(new Comparator<MyKey>() {
    public int compare(MyKey o1, MyKey o2) {
        // логика сравнения
        return 0;
    }
});
map3.put(new MyKey(), 1); // теперь работает

Таким образом, нельзя добавить в TreeMap любой объект в качестве ключа без обеспечения возможности сравнения ключей.