关于so​​rt()的集合与数组

Jos*_*son 29 java

关于so​​rt()的集合与数组有关sort()方法的这两个有什么区别?我知道Arrays的sort()正在使用二进制搜索sort(),那么Collections呢?以及如何选择使用哪个?谢谢!

Mar*_*iot 47

那么,除了在不同的东西操作(Collections.sort操作上List,以及Arrays.sort操作的阵列),java.util.Collections.sort()简单地调用java.util.Arrays.sort()做繁重.

此外,对于它的价值,注意Arrays.sort运行合并排序.

  • 在java 7中看起来像是一个timsort(修改后的合并排序)http://stackoverflow.com/questions/4018332/is-java-7-using-tim-sort-for-the-method-arrays-sort (5认同)
  • 但是,原始数组上的排序使用了快速排序(因为对于基元而言,稳定性属性既不需要也不有意义). (3认同)

use*_*421 11

我知道Arrays的sort()正在使用二进制搜索sort()

不,你不知道任何这样的事情.它没有这样做.见Javadoc.

声明甚至没有意义.你不能 '使用二进制搜索进行排序'.二进制搜索仅在数据排序时才有效.也许您所读到的是Arrays.binarySearch() 假定数据已排序.


小智 10

Collections.sort()在List上运行,而Arrays.sort()在Array上运行.

Arrays.sort()使用Dual-Pivot Quicksort进行原始数组,使用MergeSort进行对象数组的排序.

Collections.sort()的示例:

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

 Collections.sort(arr);
Run Code Online (Sandbox Code Playgroud)

Arrays.sort()的示例:

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

 Arrays.sort(arr);
Run Code Online (Sandbox Code Playgroud)