Solo me pregunto cuáles son los pros y los contras de un TreeSet, si alguien podría decirme por favor? ¡Gracias!¿Cuáles son los pros y los contras de TreeSet
Respuesta
Una de las clases de Colección. Le permite acceder a los elementos de su colección por clave, o secuencialmente por clave. Tiene mucho más sobrecarga que ArrayList o HashMap. Use HashSet cuando no necesite acceso secuencial, solo busque por clave. Use una ArrayList y use Arrays. ordena si solo quieres los elementos en orden. TreeSet mantiene los elementos en orden en todo momento. Con ArrayList solo ordena cuando lo necesita. Con TreeSets, la clave debe estar incrustada en el objeto que almacena en la colección. A menudo puede tener TreeSet of Strings. Todo lo que puedes hacer entonces es decir si una Cadena dada está en el Conjunto. No te encontrará un objeto asociado como lo hará un Treemap. Con TreeMap, las claves y los objetos con los que están asociados están separados.
TreeSet y su hermano TreeMap extrañamente no tienen nada que ver con la representación de árboles. Internamente utilizan una organización en árbol para proporcionarle un conjunto/mapa ordenado alfabéticamente, pero no tiene control sobre los enlaces entre padres e hijos.
Internamente TreeSet usa árboles rojo-negros. No hay necesidad de preseleccionar los datos para obtener un árbol bien equilibrado. Por otro lado, si los datos están ordenados (ascendentes o descendentes), no va a doler como lo hace con otros tipos de árbol.
Si no proporciona un Comparador para definir el orden que desea, TreeSet requiere una implementación Comparable en la clase de elemento para definir el orden natural.
Caso de uso típico: Tome un texto, suelte todas las palabras de este texto en un TreeSet
"Use HashSet cuando no necesite acceso secuencial, solo busque por clave." - ¿Quiere decir que no necesita buscar por clave (que es lo que proporciona un mapa)? –
Si necesita un acceso secuencial específico pero no ordena, puede usar LinkedHashSet que conserva el orden de los datos de entrada. También TreeSet ha eliminado el orden de logn mientras PriorityQueue remove order es O (n) –
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 necesita proporcionar Comparador en el constructor. Además, la implementación de HashSet proporciona un mejor rendimiento ya que proporciona ~ O (1) complejidad.
¡Muchas gracias, amigo! – Rifk
Parece extraño "basado en un algoritmo de árbol rojo/negro" como "pro". También parece un poco raro mencionar la complejidad de O (log (N)) como profesional cuando lo más obvio para comparar TreeSet es HashSet, que (como dijiste) tiene una mejor complejidad de tiempo. –
@Laurence: 1) La inserción en una lista es O (N) si incluye la comprobación de exclusividad, por lo que O (log (N)) es un "pro" en relación con eso. 2) un HashSet es solo O (1) si usa una función hash decente y permite que crezca la tabla hash. –
Supongo que esta estructura de datos usaría un árbol binario para mantener los datos de modo que sea posible la recuperación de orden ascendente. En ese caso, si trata de mantener el árbol en equilibrio, entonces la operación de eliminación sería un poco costosa.
-1: HashSet usa un árbol rojo-negro. De acuerdo con [esta página] (http://www.eli.sdsu.edu/courses/fall95/cs660/notes/RedBlackTree/RedBlack.html) la complejidad de la eliminación es O (log (N)) –
Contras: Una trampa con 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, de modo que si compareTo e igual no se implementa de forma coherente camino, te espera un mal viaje.
Esto es especialmente un problema cuando un método devuelve un conjunto y no se sabe si la implementación es un conjunto de árboles o, por ejemplo, un conjunto de claves.
La lección para aprender aquí es, siempre evite implementar compareTo e iguale inconsistentemente. Si necesita ordenar objetos de una manera que es inconsistente con los iguales, use un Comparador.
tal vez usted quería decir "si a.compareTo (b) devuelve cero"? –
Wow. Comentarios constructivos sobre una publicación de 4 años. Gracias, lo he arreglado. – Buhb
TreeSet fragmenta la memoria y tiene gastos generales de memoria adicionales. Puede ver 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 la memoria :), pero es mejor no gastarlo aquí y allá. Tienes GC, tienes fallas en el caché y todas estas cosas son malas.
A menudo puede utilizar PriorityQueue en lugar de TreeSet. Y en su caso de uso típico, es mejor simplemente ordenar la matriz de cadenas.
- 1. Objeto de solicitud, ¿cuáles son los pros y los contras?
- 2. ¿Cuáles son los pros y los contras de usar Global.asax?
- 3. ¿Cuáles son los pros y los contras de la UCI?
- 4. ¿Cuáles son los pros y los contras de Solr & ElasticSearch?
- 5. ¿Cuáles son los pros y los contras de los submódulos de git y Repo?
- 6. ¿Cuáles son los pros/contras de 64 bit .NET?
- 7. ¿Cuáles son los pros y los contras de los procedimientos de llamada en VB.NET?
- 8. ¿Cuáles son los pros y los contras de la eliminación y las actualizaciones en cascada?
- 9. ¿Cuáles son los pros y los contras de asset_packager y Jammit?
- 10. ¿Cuáles son los pros y los contras de las bases de datos de objetos?
- 11. ¿Cuáles son los pros y los contras de almacenar archivos en una base de datos?
- 12. ¿Cuáles son los pros y los contras de usar un correo electrónico como nombre de usuario?
- 13. ¿Cuáles son los pros y los contras de usar una enumeración de banderas?
- 14. ¿Cuáles son los pros y los contras de las revisiones de diseño/código?
- 15. ¿Cuáles son los pros y los contras de las diversas implementaciones de Python?
- 16. ¿Cuáles son los pros y los contras de la entrada delimitada general de Ruby? (sintaxis porcentual)
- 17. ¿Cuáles son los pros y los contras de usar una plantilla de motor como Jade?
- 18. ¿Cuáles son los pros y los contras para usar un contenedor de IOC?
- 19. ¿Cuáles son los pros y los contras de ejecutar un trabajo en Hadoop usando varios idiomas?
- 20. ¿Cuáles son los pros y los contras de usar git-svn?
- 21. ¿Cuáles son los pros y los contras de adoptar HTML 5 ahora para rediseñar un sitio?
- 22. ¿Cuáles son los pros y los contras del uso de d-punteros?
- 23. ¿Cuáles son los pros y los contras de la autentificación HTTP básica
- 24. ¿Cuáles son los pros y los contras al elegir jquery como mi biblioteca principal de JavaScript?
- 25. ¿Cuáles son los pros y los contras de usar Castle Active Record vs Straight NHibernate?
- 26. ¿Cuáles son los pros y los contras de LinkedHashMaps vs. LinkedHashSets?
- 27. ¿Cuáles son los pros y los contras de un sitio 100% HTTPS?
- 28. ¿Cuáles son los pros y los contras de dejar que Google aloje jQuery para mí?
- 29. ¿Cuáles son los pros y los contras de OleDB versus SQLClient?
- 30. ¿Cuáles son los pros y los contras de usar configChanges = "orientation" para dispositivos Android?
estas preguntas y las respuestas correspondientes merecen estar disponibles. ¡muy útil! ¡gracias! – mtical