Я действительно хочу углубить свое понимание того, как TreeSet, особенно версия без аргументов, которая не использует компаратор, поддерживает содержащиеся в ней элементы , Я не могу найти удовлетворительного объяснения нигде; они либо слишком базовые, либо слишком продвинутые для меня. Из моих исследований кажется, что TreeSets фактически хранят свои элементы в TreeMap, а TreeMaps на самом деле являются красно-черными деревьями. Я очень уверен в своем понимании того, как элементы добавляются к красно-черным деревьям.Метод дерева TreeSet, который управляет вставкой элемента в дерево Red-Black
Я предполагаю, что где-то в API Java должен быть алгоритм или метод, который выполняет вставку элементов в дерево Red-Black. Мой первый вопрос: где в Java API находится этот алгоритм?
Также, как именно этот алгоритм вызывается? Я предполагаю, что он вызывается методом add (E e) в классе TreeSet, правильно? Может ли кто-нибудь предоставить более подробную информацию о точной цепочке событий, которые возникают при добавлении элемента в дерево.
Наконец, как и эксперимент, я дал объекту метод compareTo(), но НЕ реализовал интерфейс Comparable. При попытке добавить эти объекты в TreeSet генерируется исключение. Я хочу понять, почему выбрано исключение, даже если объект имеет метод compareTo(). Я предполагаю, что есть метод где-то в алгоритме вставки, который требует, чтобы все объекты реализовали Comparable, это правильно? СтекTrace для брошенного исключения указывает на метод TreeMap.compare(). Я предполагаю, что это метод, который требует, чтобы все объекты, добавленные в TreeSet, реализовали интерфейс Comparable, но я не вижу этот метод TreeMap.compare() в API. Как я могу найти дополнительную информацию об этом методе TreeMap.compare() в API?
Благодарим вас за помощь.
«Почему выбрано исключение, даже если объект имеет метод compareTo().« Java не использует [duck typing] (https://en.wikipedia.org/wiki/Duck_typing).Простое наличие метода с именем compareTo() 'недостаточно: класс должен реализовывать' Comparable' и корректно переопределять 'compareTo()' для использования. –
'TreeMap.compare' - частная деталь реализации, которая не отображается как часть API. –