Java中Arrays类实际是一个实现对数组操作的各种方法的类,可以实现对数组的排序和搜索,数组的比较和对数组增加元素,数组的拷贝和数据转换为字符串的功能。今天我们就来说说Arrays.sort()对数组进行排序的规则。
1.对基本类型的数组进行排序
(1)Arrays类中的sort()使用的是经过调优的快速排序算法;
(2)对于int[],double[],char[]等基本数据类型的数组,Arrays类只提供了默认的升序排列,并没有提供相应的降序排列方法;
数组排序函数原型:
static void sort(int[] a) 对指定的int型数组按数字升序进行排序
static void sort (int[] a,int fromIndex,int toIndex) 对指定int型数组的指定范围按数字升序进行排序
例如:
输出结果:
Arrays.sort()底层实现采用了快速排序。快速排序的思想是:首先选取一个基准,这个基准可以是第一个数字也可以是任意数值,然后用两个指针left和right分别指向所要排序的数组的0号位置和length-1号位置,在保证left
2.对复合数据类型的数据的排序
函数原型:
public static void sort(T[] a,Comparator c) 根据指定比较器产生的顺序对指定对象数组进行排序
public static void sort(T[] a,int fromIndex,int toIndex,Comparator c) 根据指定比较器产生的顺序对指定对象数组的指定范围进行排序
这两个排序算法是经过调优的归并排序算法
例如:
输出结果:
既然这里用到了Comparator比较器对象,那我们就来说说Java中的两种比较器Comparable和Comparator
区别:①Comparable位于java.lang包下,Comparator位于java.util包下;
②实现Comparable接口要重写ComparetTo()方法,实现Comparator接口需要重写compare()方法;
③Comparable接口将比较代码嵌入需要进行比较的类的自身代码中,Comparator接口要在一个单独的类中实现比较;
④如果前期类设计没有考虑到类的比较问题而没有实现Comparable接口,后期可以通过Comparator接口来实现算法进行排序;
⑤Comparable接口强制进行自然排序,Comparator接口不强制自然排序,可以指定排序