Нет, нет и не может быть по спецификации.Более того, вы неправильно поняли, как TreeSet
использует его Comparator
.
С TreeSet Javadoc :
Обратите внимание, что порядок, поддерживаемый набором (независимо от того, предоставляется ли явный компаратор), должен соответствовать равным, если онэто правильно реализовать интерфейс Set.(См. Comparable или Comparator для точного определения соответствия с equals.) Это так, потому что интерфейс Set определен в терминах операции equals, но экземпляр TreeSet выполняет все сравнения элементов, используя свой метод CompareTo (или сравнение), поэтому дваэлементы, которые считаются равными этим методом, с точки зрения множества равны.Поведение множества корректно определено, даже если его порядок не совпадает с равенством;он просто не соблюдает общий контракт интерфейса Set.
From Comparable javadoc :
Сказано естественное упорядочение для класса Cбыть согласованным с equals в том и только в том случае, если e1.compareTo (e2) == 0 имеет то же логическое значение, что и e1.equals (e2) для каждого e1 и e2 класса C. Обратите внимание, что null не является экземпляром какого-либо класса,и e.compareTo (null) должен генерировать исключение NullPointerException, даже если e.equals (null) возвращает false.
From Collection javadoc :
логическое значение содержит (Object o)
Возвращает значение true, если эта коллекция содержит указанный элемент.Более формально, возвращает true тогда и только тогда, когда эта коллекция содержит хотя бы один элемент e такой, что (o == null? E == null: o.equals (e)).
Следовательно,В спецификации не может быть какого-либо класса, который реализует интерфейс Collection<E>
, а полностью зависит от некоторого внешнего объекта в стиле Comparator для вставки объектов.Все коллекции должны использовать equals
метод класса Object
, чтобы проверить, если объект уже вставлен.