做往年笔试题时有一道这样的算法题:
某日有许多会议,输入各个会议起始和终止时间,求这天能参与的最多会议数。
显然需要把会议的起始和终止时间存放到二维数组中,按结束时间排序,就很容易得到结果了。
接下来看看二维数组如何排序:
首先建一个二维数组:
int[][] arrays=new int[][]{
{1,3},
{1,2},
{4,1},
{3,5},
{2,6},
{5,4}
};
接下来对二维数组进行排序,排序还是大家很熟悉Arrays.sort(),但要多传入一个参数。
写法一:
按二维数组的第一列元素排序的,第一列相同则按第二列排序
Arrays.sort(arrays, 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];
}
});
排序结果:
按二维数组第二列元素排序:
Arrays.sort(arrays, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[1]==o2[1]){
return o1[0] - o2[0];
}
return o1[1] - o2[1];
}
});
排序结果:
写法二:Lambada表达式写法(常用)
Arrays.sort(arrays, (o1, o2) -> {
if(o1[0]==o2[0]){
return o1[1]-o2[1];
}
return o1[0] - o2[0];
});
如果不需要上面代码中的 if 条件判断,甚至还有更简洁的写法:
Arrays.sort(arrays, Comparator.comparingInt(o -> o[0]));