Это может быть связано с тем, что Set
не допускает дублирование элементов.
Вы помещаете объекты типа ItemCacheNode
в set
ADT с именем bigHeap. Теперь, когда новый объект добавляется в набор, согласно документам ,
Элементы упорядочены, используя их естественное упорядочение или
Компаратор предоставляется во время создания набора, в зависимости от того, какой
используется конструктор.
Ошибочный компаратор переопределяет все остальные звуки, равнозначные методу, присущему TreeSet
, если Treeset неправильно реализован с использованием интерфейса Set
. В соответствии с вышеупомянутыми документами,
Обратите внимание, что порядок поддерживается набором (независимо от того, явно
компаратор предоставляется) должен соответствовать равным, если это
правильно реализовать интерфейс Set. (См. Сравнительный или компаратор
для точного определения в соответствии с равными.) Это так
потому что интерфейс Set определен в терминах операции equals,
но экземпляр TreeSet выполняет все сравнения элементов, используя его
Сравнивать (или сравнивать) метод, поэтому два элемента считаются равными
этим методом с точки зрения множества равны.
поведение набора четко определено, даже если его порядок не соответствует
с равными; он просто не соблюдает общий договор
интерфейс.
Ваше определение,
private TreeSet<T> treeSet = new TreeSet<T>(comparator);
игнорирует использование интерфейса и, как следствие, продемонстрировал эту ошибочную функциональность, не соблюдая общее представление о функциональности не дублирования Set
.