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

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

好吧,除了操作不同的东西( Collections.sortListArrays.sort在数组上操作), java.util.Collections.sort()只是调用java.util.Arrays.sort()来做重吊装。

此外,为了它的价值,请注意Arrays.sort运行合并排序。

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

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

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

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

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

Collections.sort()的示例:

  ArrayList arr = new ArrayList(); arr.add(15); arr.add(10); arr.add(5); arr.add(2); Collections.sort(arr); 

Arrays.sort()的示例:

 int[] arr = new int[4] arr[0]=15; arr[1]=10; arr[2]=5; arr[3]=2; Arrays.sort(arr); 

如果您正在处理数组,请使用Arrays.sort()。 如果您正在处理实现Collection接口的东西(例如ArrayList),请使用Collections.sort()。

正如其他答案所说,在处理实现Collection接口的对象和处理Array时的Arrays.sort()方法时,您将使用Collections.sort()。

一个相关的问题是,如果要对一组值进行排序,哪种类型的数据结构会更好。 如果你需要使用List,那么我建议使用LinkedList,因为插入在O(1)中运行,其中像ArrayList这样的东西将是O(n)。

如果没有重复项或者不需要重复项,您也可以选择使用SortedSet。 这样你就不必费心使用外部排序方法了。

处理列表时使用Collection.sort,处理数组时使用arrays.sort。 但内部Collection.sort仅使用Arrays.sort方法。 现在内部排序是基于Timosrt技术而不是合并排序完成的,因为稳定的自适应数组在Merge排序中进行O(nlogn)比较,但在Timsort最坏的情况下,它将需要O(nlogn),在最坏的情况下,存储需要n / 2 in Timsort,但它不是Merge排序技术的情况。