Чтобы ответить на такие вопросы, это гораздо лучше читать документацию вместо выполнения теста. Тест ничего не показывает. Даже если вы видите, что методы не вызываются, это не означает, что они не будут вызываться в дальнейших версиях Java или с использованием другого поставщика JDK. Или, вероятно, эти методы можно было бы назвать при выполнении некоторых других операций с вашей картой.
В данном конкретном случае documentation говорит следующее:
Обратите внимание, что порядок поддерживается картой дерева, как и любой отсортированной карта, и действительно ли не предусмотрен явный компаратор, должны соответствоватьequals
, если эта отсортированная карта должна правильно реализовать интерфейс Map
. (См Comparable
или Comparator
для точного определения в соответствии с equals
.) Это так, потому что интерфейс Map
определен в терминах equals
операции, но отсортированная карта выполняет все ключевые сравнения, используя свой метод compareTo
(или compare
), так что два ключи, которые считаются равными по этому методу, равны, с точки зрения сортированной карты. Поведение сортированной карты равно, четкое, даже если его порядок не соответствует equals
; он просто не подчиняется генеральному контракту интерфейса Map
.
Emphasis mine.
Так, согласно последней предложении TreeMap
будет полностью функциональным, если вы не определить метод equals
для ключей, но это нарушит договор интерфейса Map
.Например, Map.containsKey
контракт заключается в следующем:
Возвращает true
если эта карта содержит отображение для указанного ключа. Более формально возвращает true
тогда и только тогда, когда эта карта содержит отображение для ключа k
такого, что (key==null ? k==null : key.equals(k))
.
Так что это было бы неправильно, если вы используете TreeMap
с ключами, имеющих противоречивый equals
реализации. Если вы передадите карту на какой-то метод, предполагающий, что переданная карта соответствует контракту, тогда этот метод может работать некорректно.
Вы правы – Eran
Ваше второе утверждение неверно. 'TreeMap' также должен подчиняться генеральному контракту Map, а затем поверх него, приходит Comparable и Comparator. –
, но при попытке отладки кода программы .... Его никогда не происходит внутри метода equals() .... Пытался достичь условия столкновения, а также ... возвращая одинаковое значение int каждый раз ... ни один из случаев его достижения to equals(). – user3571396