Se han dado muchas respuestas, basadas en consideraciones técnicas, especialmente en torno al rendimiento. Según yo, la elección entre TreeSet
y HashSet
asuntos.
Pero preferiría decir que la elección debería basarse primero en consideraciones conceptuales .
Si, para los objetos que necesita manipular, un orden natural no tiene sentido, entonces no lo use TreeSet
.
Es un conjunto ordenado, ya que se implementa SortedSet
. Por lo tanto, significa que debe anular la función compareTo
, que debe ser coherente con lo que devuelve la función equals
. Por ejemplo, si tiene un conjunto de objetos de una clase llamada Estudiante, entonces no creo queTreeSet
tendría sentido, ya que no existe un orden natural entre los estudiantes. Puede ordenarlos por su calificación promedio, está bien, pero este no es un "orden natural". La función compareTo
devolvería 0 no solo cuando dos objetos representan al mismo alumno, sino también cuando dos alumnos diferentes tienen la misma calificación. Para el segundo caso, equals
devolvería falso (a menos que decida hacer que el último devuelva verdadero cuando dos estudiantes diferentes tienen la misma calificación, lo que haría que la equals
función tenga un significado engañoso, por no decir un significado incorrecto).
Tenga en cuenta esta coherencia entre equals
y compareTo
Es opcional, pero muy recomendable. De lo contrario, el contrato de interfaz Set
se rompe, lo que hace que su código sea engañoso para otras personas, lo que posiblemente también conduzca a un comportamiento inesperado.
Este enlace podría ser una buena fuente de información sobre esta pregunta.