jdk1.6 中,都使用归并排序
jdk1.7中,改为使用TimSort,而且对comparator的实现检查更加严格,如果没有考虑对象相等的比较,会抛出异常,因未满足三个条件,如下:
a). sgn(compare(x, y)) == -sgn(compare(y, x))
b). (compare(x, y)>0) && (compare(y, z)>0) 意味着compare(x, z)>0
c). compare(x, y)==0 意味着对于任意的z:sgn(compare(x, z))==sgn(compare(y,z)) 均成立
Why 换用TimSort?
原因:Timsort是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法,它在现实中有很好的效率
网友评论