Java中常用的数组或集合排序的方法有两个,一个是java.util.Arrays中的静态方法Arrays.sort(),还有一个是java.util.Collections中的静态方法的Collections.sort()方法,下面分别介绍两种用法。
Arrays中的sort()方法主要是针对各种数据类型(基本数据类型和引用对象类型)的数组元素排序。
关于引用对象类型数组的排序sort()方法要用到接口Comparator,对其排序内部的比较函数compare()进行重写,以便于我们按照我们的排序要求对引用对象数组极性排序,默认是升序排序,但可以自己自定义成降序排序。关于Comparator的介绍见官方文档
sort
根据指定比较器产生的顺序对指定对象数组进行排序。数组中的所有元素都必须是通过指定比较器可相互比较的(也就是说,对于数组中的任何e1和e2元素而言,c.compare(e1, e2)不得抛出ClassCastException)。
保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。
该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。
参数:
a- 要排序的数组
c- 确定数组顺序的比较器。null值指示应该使用元素的自然顺序。
抛出:
ClassCastException- 如果数组包含使用指定的比较器不可相互比较的 的元素。
sort
public staticvoidsort(T[] a, int fromIndex, int toIndex,Comparatorc)
根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。排序的范围从索引fromIndex(包括)一直到索引toIndex(不包括)。(如果fromIndex==toIndex,则排序范围为空。)此范围内的所有元素都必须是通过指定比较器可相互比较的(也就是说,对于该范围中的任何e1和e2元素而言,c.compare(e1, e2)不得抛出ClassCastException)。
保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。
该排序算