funciona como java data-structures treeset

como - treeset java 8



Cuáles son los pros y los contras de un TreeSet (5)

Contras: Un inconveniente de TreeSet es que implementa la interfaz Set de una manera inesperada. Si un TreeSet contiene el objeto a, entonces el objeto b se considera parte del conjunto si a.compareTo (b) devuelve 0, incluso si a.equals (b) es falso, entonces si compareTo e igual no se implementa de manera consistente , te espera un mal viaje.

Esto es especialmente un problema cuando un método devuelve un Conjunto, y no sabe si la implementación es un TreeSet o, por ejemplo, un HashSet.

La lección a aprender aquí es, siempre evite implementar compareTo y es igual a inconsistente. Si necesita ordenar los objetos de una manera que sea inconsistente con los iguales, use un Comparador.

Solo me pregunto cuáles son las ventajas y desventajas de un TreeSet, si alguien me puede decir por favor. ¡Gracias!


Supongo que esta estructura de datos usaría un árbol binario para mantener los datos de modo que la recuperación en orden ascendente sea posible. En ese caso, si intenta mantener el árbol en equilibrio, la operación de eliminación sería un poco costosa.


TreeSet fragmenta la memoria y tiene gastos de memoria adicionales. Puede mirar las fuentes y calcular la cantidad de memoria adicional y la cantidad de objetos adicionales que crea. Por supuesto, depende de la naturaleza de los objetos almacenados y también puedes sospechar que soy paranoico con respecto a la memoria :) pero es mejor no gastarlo aquí y allá: tienes GC, tienes fallas de caché y todas estas cosas son muy poco profundas.

A menudo puede usar PriorityQueue en lugar de TreeSet. Y en su caso de uso típico, es mejor ordenar la matriz de cadenas.


TreeSet:
Pros: ordenado, basado en un algoritmo de árbol rojo / negro, proporciona complejidad O (log (N)) para las operaciones.
Contras: el valor debe ser Comparable o debe proporcionar Comparator en el constructor. Además, la implementación de HashSet proporciona un mejor rendimiento, ya que proporciona una complejidad ~ O (1).


Una de las clases de colección. Le permite acceder a los elementos de su colección por clave, o secuencialmente por clave. Tiene una sobrecarga considerablemente mayor que ArrayList o HashMap. Use HashSet cuando no necesite acceso secuencial, solo busque por clave. Use un ArrayList y use Arrays. ordena si solo quieres los elementos en orden. TreeSet mantiene los elementos en orden en todo momento. Con ArrayList usted solo ordena cuando lo necesita. Con TreeSets, la clave debe estar incrustada en el objeto que almacena en la colección. A menudo es posible que tenga TreeSet of Strings. Todo lo que puedes hacer entonces es decir si una Cadena dada está en el Conjunto. No le encontrará un objeto asociado como lo hará un Treemap. Con un TreeMap, las claves y los objetos a los que están asociados están separados.

TreeSet y su hermano TreeMap extrañamente no tienen nada que ver con representar árboles. Internamente, utilizan una organización de árbol para darle un Conjunto / Mapa ordenado alfabéticamente, pero usted no tiene control sobre los vínculos entre padres e hijos.

Internamente, TreeSet usa árboles rojo-negros. No es necesario ordenar previamente los datos para obtener un árbol bien equilibrado. Por otro lado, si los datos se clasifican (ascendente o descendente), no se dañará como ocurre con otros tipos de árboles.

Si no proporciona un comparador para definir el orden que desea, TreeSet requiere una implementación comparable en la clase de artículo para definir el orden natural.