Java中Collections.sort方法详解
时间:2022/11/27
在我们写算法题的时候有时需要对给定的List列表进行排序,这样方便之后的操作,此时我们可以用到Collections类中的sort方法,Java API文档中对该方法的定义如下:
可以看到,这两个方法都是静态方法,如果要使用第一个的sort方法,那么传入的参数list中的泛型T必须要继承Comparable类,否则只能使用第二个的sort方法。在使用第二个sort方法时,除了需要传入要排序的list列表,还需要定义一个匿名内部类,在匿名内部类中实现compare方法,如下所示:
List<String> list = new ArrayList<>(); list.add("machi"); list.add("huangzhan"); System.out.println(list); Collections.sort(list, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); System.out.println(list);
输出的结果如下所示:
[machi, huangzhan]
[huangzhan, machi]
从中可以看出,sort方法默认是按照升序进行排序,也就是在匿名内部类的compare中,返回的值为正数,说明o1大于o2,那么o2会放到o1的前面,如果想要降序排序,需要添加一个负号。
需要补充的是,上面的写法可以通过Java中的lambda表达式进行简化:
Collections.sort(list, (o1, o2) -> o1.compareTo(o2));
在此基础基础上再补充一下如何使用Arrays.sort方法来对一个二维数组进行排序,这个补充的想法来自于leetcode406:
现在有一个people二维数组,每个people[i]=[hi, wi],其中hi表示第i个人的身高,wi表示第i个人的体重,现在要求按身高降序,身高相同时按体重升序排列,代码如下所示:
Arrays.sort(people, (a, b) -> { if(a[0] == b[0]) return a[1] - b[1]; return b[0] - a[0]; });
升序前减后,降序后减前。
努力,向上,自律