2011-03-06 22 views
25

Colecciones vs matrices con respecto a sort() ¿Cuál es la diferencia entre estos dos con respecto método sort()? Sé que Arrays 'sort() está utilizando la búsqueda binaria para sort(), ¿qué pasa con Collections? ¿Y cómo elegir qué usar? Gracias!Colecciones vs matrices con respecto a sort()

+5

La búsqueda binaria no es un algoritmo de ordenación. – SigmaX

Respuesta

38

Bueno, además de operar en cosas diferentes (Collections.sort opera en un List y Arrays.sort opera sobre una matriz), java.util.Collections.sort() llamadas con sólo java.util.Arrays.sort() a hacer el trabajo pesado.

Además, por lo que vale la pena, observe que Arrays.sort ejecuta una especie de mezcla.

+2

El ordenamiento en las matrices primitivas usa quicksort, aunque (dado que para los primitivos, la propiedad de estabilidad no es necesaria ni significativa). –

+3

parece que es un timsort (modificado de combinación de tipo) en Java 7 http://stackoverflow.com/questions/4018332/is-java-7-using-tim-sort-for-the-method-arrays-sort – rogerdpack

1

Utilice Arrays.sort() si se trata de una matriz. Use Collections.sort() si está tratando con algo que implementa la interfaz de Colección (por ejemplo, ArrayList).

1

Como han dicho las otras respuestas, utilizará Collections.sort() cuando se trata de un objeto que implementa la interfaz Collection y el método Arrays.sort() cuando se trata de una matriz.

Una cuestión relacionada es qué tipo de estructuras de datos son mejores si se desea ordenar un conjunto de valores. Si necesita usar una Lista, entonces le sugiero que use una Lista Vinculada ya que las inserciones se ejecutan en O (1) donde algo como una Lista de Arreglos sería O (n).

También puede optar por utilizar una SortedSet si no habrá duplicados o tener duplicados es no deseado. De esta forma, no tiene que preocuparse por usar un método de clasificación externo.

9

sé ordenar matrices() está utilizando binario búsqueda de una especie()

No, no sé nada de eso. No hace eso. Ver el Javadoc.

La declaración ni siquiera tiene sentido. Usted no puede 'utilizar la búsqueda binaria para ordenar'. La búsqueda binaria solo funcionó cuando los datos están ya ordenados. Tal vez lo que lees es que Arrays.binarySearch()asume los datos están ordenados.

4

Collections.sort() actúa en la lista Mientras Arrays.sort() actúa en una matriz.

Arrays.sort() utiliza Dual-pivote Quicksort para Arrays primitivo y mergesort para clasificar matriz de objetos.

Ejemplo de Collections.sort():

ArrayList<Integer> arr = new ArrayList<Integer>(); 
arr.add(15); 
arr.add(10); 
arr.add(5); 
arr.add(2); 

Collections.sort(arr); 

Ejemplo de Arrays.sort():

int[] arr = new int[4] 
arr[0]=15; 
arr[1]=10; 
arr[2]=5; 
arr[3]=2; 

Arrays.sort(arr); 
0

Collection.sort se utiliza cuando se trata de listas y Arrays.sort es demandado cuando se trata de matrices. Pero internamente Collection.sort solo utiliza el método Arrays.sort. Ahora la clasificación interna se realiza en Timosrt en lugar de merge sort, ya que las matrices adaptativas y estables toman comparaciones O (nlogn) en Merge sort, pero en Timsort, el peor caso es O (nlogn) y en el peor de los casos requiere almacenamiento n/2 en Timsort, pero no es en el caso de la técnica de clasificación Merge.

Cuestiones relacionadas