¿MyClass implements Comparable<MyClass>
o algo así?
Si no, entonces ese es el motivo.
Para TreeSet
, o bien tiene que hacer que los elementos Comparable
, o proporcione un Comparator
. De lo contrario, TreeSet
no puede funcionar, ya que no sabría cómo ordenar los elementos.
Recuerde, TreeMap implements SortedSet
, por lo que tiene que saber cómo ordenar los elementos de una manera u otra.
Debe familiarizarse con la forma en la implementación de Comparable
define ordenamiento natural de los objetos de un tipo determinado.
La interfaz define un método, compareTo
, que debe devolver un entero negativo, cero o un entero positivo si este objeto es menor, igual o mayor que el otro objeto, respectivamente.
El contrato requiere que:
sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
- es transitiva:
x.compareTo(y)>0 && y.compareTo(z)>0
implica x.compareTo(z)>0
x.compareTo(y)==0
implica que sgn(x.compareTo(z)) == sgn(y.compareTo(z))
para todos z
Además, recomienda que:
(x.compareTo(y)==0) == (x.equals(y))
, es decir, "en consonancia con equals
Esto puede parecer mucho para digerir al principio, pero en realidad es bastante natural con cómo se defina orden total.
Si los objetos no pueden ser ordenadas de una manera u otra, a continuación, un TreeSet
podría no tener sentido. Es posible que desee utilizar un HashSet
, que tiene sus propios contratos. Es probable que se requiera a @Override hashCode()
y equals(Object)
de acuerdo con su tipo (véase: Overriding equals and hashCode in Java)
MyClass no implementa Comparable. Solo quiero usar un conjunto para filtrar los elementos únicos de la lista, ya que mi lista contiene duplicados innecesarios. – Chuck
Use un HashSet y luego. No trata de ordenar los elementos. –