Я пытаюсь использовать метод containsKey
метода TreeMap
, но почему-то у меня с ним проблемы.
Объекты, хранящиеся в карте дерева, определены таким образом, что equals()
не дает того же результата, что и compareTo()
. это предназначено.
Однако документ java.util.Map
говорит:
Возвращает true, если эта карта содержит сопоставление для указанного ключа. Более формально, возвращает true тогда и только тогда, когда эта карта содержит отображение для ключа k такого, что
(key==null ? k==null : key.equals(k))
. (Таких отображений может быть не больше одного.)
Итак, я попробовал следующее:
c = someModifiedObject();
boolean t1 = sm.containsKey(c);
someObject c2 = new someObject();
boolean t2 = sm.containsKey(c2);
boolean t3 = c.equals(new Chain());
int t4 = c.compareTo(new Chain());
t1 истинно, так как объект находится в древовидной карте. t3 истинно, так как t1 равно t3 (относительно оператора изменения equals()
) t4 ложно, однако t2 также ложно. Кажется, что TreeMap
использует compareTo()
, а не equals()
, чтобы определить, присутствует ли объект.
Есть ли другая реализация отсортированной карты, где я могу использовать equals()
для проверки существования объекта?
compareTo
иequals
не реагировали одинаково??? (И имейте в виду, что любой упорядоченный набор будет использовать относительное сравнение для установления относительного положения сущностей в наборе, поэтому естественно используетсяcompareTo
. Вам нужно будет использовать неупорядоченный набор дляequals
, чтобы быть логичным.) - person Hot Licks   schedule 17.02.2014BigDecimal
и хочет выполнить сортировку по первому и подсортировать по второму (для значений, которым соответствует первое поле). Чтобы разрешить (1.00, 2.0) сортировать между (1.0, 1.0) и (1.0, 3.0), необходимо, чтобы реляционный компаратор дляBigDecimal
игнорировал точность [количество нулей после запятой]. С другой стороны, даже если 1,00 не выше и не ниже 1,0, это не значит, что его следует считать эквивалентным. - person supercat   schedule 18.02.2014compareTo
будет использоваться для сортировки; методequals
используется для проверки эквивалентности. Поведение, необходимое для двух заданий естественно, будет в значительной степени совпадать, но когда они расходятся,compareTo
лучше вести себя так, как наиболее подходит для сортировки, аequals
вести себя так, как наиболее подходит для эквивалентности. тестирования, чем заставить любой из этих способов вести себя таким образом, который на самом деле не подходит для его основной задачи. - person supercat   schedule 18.02.2014