Loading

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];
});

升序前减后,降序后减前。

 

posted @ 2022-11-27 10:51    阅读(1505)  评论(0编辑  收藏  举报