Gran pregunta y grandes respuestas. Solo pensé en agregar algunos puntos a tener en cuenta:
- Si su colección a ordenar es de corta duración, por ejemplo, se usa como argumento para un método, y necesita la lista ordenada dentro del método, entonces use Collections.sort (colección). O si es un objeto de larga duración, pero es necesario clasificarlo muy raramente.
Justificación: la colección ordenada es necesaria para algo específico, y probablemente no agregará ni eliminará con mucha frecuencia. Por lo tanto, no le importan los elementos de la colección una vez que está ordenada. Básicamente:
ordenar -> usarlo -> olvidar
Si agrega un nuevo elemento a la colección ordenada, tendrá que ordenar la colección nuevamente, ya que el orden no está garantizado al insertar un nuevo elemento.
- Si la colección que se va a ordenar es de larga duración y / o si es un campo dentro de una clase y necesita que se ordene en todo momento, entonces debe usar una estructura de datos ordenada como TreeSet.
Justificación: Te preocupas por el orden de recogida en todo momento. Quieres que esté ordenado en todo momento. Entonces, si agrega o elimina elementos constantemente, tiene la garantía de que la colección está ordenada. Así que básicamente:
insertar / quitar -> usarlo (todo el tiempo tiene la garantía de que la colección está ordenada)
No hay un momento específico en el que necesite que se ordene la colección, sino que desea que la colección se ordene todo el tiempo.
La desventaja de usar TreeSet son los recursos que requiere para mantener la colección ordenada. Utiliza un árbol rojo-negro y requiere un costo de tiempo O (log n) para las operaciones get, put.
Mientras que si usa una colección simple, como ArrayList, las operaciones get, add son de tiempo constante O (1).