java中的Arrays.sort()方法在api中接受的单个参数只能是一维数组,那么我们想要对二维数组进行处理该怎么办?重新比较器即可,代码如下。
int[][] intervals = { { 2, 3 }, { 4, 5 }, { 6, 7 }, { 8, 9 }, { 1, 10 } };
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0])
return o1[1] - o2[1];
return o1[0] - o2[0];
}
});
代码清晰明了,学过java的人都应该看得懂,我们这里是按照o[1]的升序排列(o[0]相等的情况时),return o2[1]-o1[1]则是降序排列,这个可以根据自己的需求更改。
在Arrays类中它调用的是DualPivotQuicksort类中的sort方法,而DualPivotQuicksort存在一个常量QUICKSORT_THRESHOLD = 286,当排序长度小于这个值时使用归并排序,大于这个值时使用快排,具体的源码过于复杂,我也不知道为什么一个排序他写的变量名是e1、e2、e3什么的,瞬间不想看了。