MyClass implements Comparable<MyClass>
или что-нибудь в этом роде?
Если нет, то вот почему.
Для TreeSet
необходимо либо создать элементы Comparable
, либо предоставить Comparator
. В противном случае TreeSet
не сможет функционировать, поскольку не будет знать, как упорядочить элементы.
Помните, TreeMap implements SortedSet
, поэтому он должен знать, как заказать
элементы так или иначе.
Вы должны ознакомиться с тем, как реализовать Comparable
определяет естественный порядок для объектов данного типа.
Интерфейс определяет один метод, compareTo
, который должен возвращать отрицательное целое число, ноль или положительное целое число, если этот объект меньше, равен или больше другого объекта соответственно.
Контракт требует , что:
sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
- это транзитивно:
x.compareTo(y)>0 && y.compareTo(z)>0
подразумевает x.compareTo(z)>0
x.compareTo(y)==0
означает, что sgn(x.compareTo(z)) == sgn(y.compareTo(z))
для всех z
Кроме того, рекомендует , что:
(x.compareTo(y)==0) == (x.equals(y))
, т.е. "в соответствии с equals
Поначалу это может показаться слишком сложным, но на самом деле это вполне естественно
как определить общий порядок.
Если ваши объекты не могут быть упорядочены так или иначе, тогда TreeSet
не будет иметь смысла. Вы можете вместо этого использовать HashSet
, у которого есть свои контракты. Скорее всего, от вас потребуется @Override hashCode()
и equals(Object)
в зависимости от вашего типа (см .: Переопределение equals и hashCode в Java )