一 问题的提出
关于Java中Collections.sort和Arrays.sort的使用,需要注意的是,在本文中,比较的只有Collections.sort(List elements)和Arrays.sort(int[] var0).
对这个问题产生兴趣是因为这两者使用的时候稳定性是有差异的,那么稳定性究竟为什么有差异呢?刚开始令我好奇的是Collections.sort的源码中竟然也使用到了Arrays.sort.
二 代码分析
Arrays.sort的源代码如下
public static void sort(int[] var0) {
DualPivotQuicksort.sort(var0, 0, var0.length - 1, (int[])null, 0, 0);
这里的DualPivotQuicksort其实就是对传统的快排算法进行改进的快排,区别就是将数组切成了三段.
Collections.sort的源代码如下
default void sort(Comparator super E> var1) {
Object[] var2 = this.toArray();
Arrays.sort(var2, var1);
ListIterator var3 = this.listIterator();
Object[] var4 = var2;
int var5 = var2.length;
for(int var6 = 0; var6 < var5; ++var6) {
Object var7 = var4[var6];
var3.next();
var3.set(var7);
}
}