Java 关于List接口中sort()方法的使用

直接进入正题

sort,顾名思义,排列的意思

List接口中,sort方法时这样定义的:

default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
    }
}

那么,这里的这个 Comparator<? super E> c 是什么呢?

博主在查找了一些资料后,发现这个Comparator<? super E> c 就是排列的规则的意思,并且这个规则需要自己去定义。

下面博主举一个排列学生信息的例子:

首先,我们定义一个学生的POJO类

import java.util.Comparator;

@Autowired
public class UserPO {

    private String name ;
    private Integer age ;
    private Integer weight;

    //开始写比较规则
    public static class Comparators {
        //根据名字进行排序
        public static Comparator<UserPO> NAME = new Comparator<UserPO>() {
            @Override
            public int compare(UserPO o1, UserPO o2) {
                return o1.name.compareTo(o2.name);
            }
        };
        //根据年龄进行排序
        public static Comparator<UserPO> AGE = new Comparator<UserPO>() {
            @Override
            public int compare(UserPO o1, UserPO o2) {
                return o1.age - o2.age;
            }
        };
        //根据年龄和名字进行排序
        public static Comparator<UserPO> NAMEANDAGE = new Comparator<UserPO>() {
            @Override
            public int compare(UserPO o1, UserPO o2) {
                int i = o1.name.compareTo(o2.name);
                if ( i == 0) {
                    i = o1.age - o2.age;
                }
                return i;
            }
        };
    }
}

同学们可以看到,我在pojo类里,还多写了一些东西,就是比较的规则,通常将规则写在pojo类中。

接下来,我们就可以在主函数里通过在sort()中传入这些规则名,来进行排序。看一下怎么使用

List<UserPO> list = new ArrayList<>();

UserPO userPO1 = new UserPO();
userPO1.setName("张三");
userPO1.setAge(16);
list.add(userPO1);
        
UserPO userPO2 = new UserPO();
userPO2.setName("李四");
userPO2.setAge(14);
list.add(userPO2);
        
UserPO userPO3 = new UserPO();
userPO3.setName("王五");
userPO3.setAge(18);
list.add(userPO3);

for (int i =0; i < list.size(); i++) {
    System.out.println(list.get(i).getName() + " " + list.get(i).getAge());
}

System.out.println("----------根据年龄排序------------");
list.sort(UserPO.Comparators.AGE);
for (int i =0; i < list.size(); i++) {
    System.out.println(list.get(i).getName() + " " + list.get(i).getAge());
}

System.out.println("----------根据名字排序------------");
list.sort(UserPO.Comparators.NAME);
for (int i =0; i < list.size(); i++) {
    System.out.println(list.get(i).getName() + " " + list.get(i).getAge());
}

System.out.println("----------根据年龄和名字一起排序------------");
list.sort(UserPO.Comparators.NAMEANDAGE);
for (int i =0; i < list.size(); i++) {
    System.out.println(list.get(i).getName() + " " + list.get(i).getAge());
}

运行结果:

至此,list中sort()方法如何使用相信大家已经知道啦。感谢大家观看

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaList.sort()方法是用来对List集合的元素进行排序的。它可以按照自然顺序或者指定的比较器进行排序。 使用方法如下: 1. 自然排序 List集合的元素必须实现Comparable接口,重写compareTo()方法,才能使用自然排序。 例如: List<Integer> list = new ArrayList<>(); list.add(3); list.add(1); list.add(2); list.sort(null); //使用自然排序 System.out.println(list); //[1, 2, 3] 2. 指定比较器排序 如果List集合的元素没有实现Comparable接口,或者需要按照不同的排序规则进行排序,可以使用Comparator接口来指定比较器。 例如: List<Student> list = new ArrayList<>(); list.add(new Student("Tom", 18)); list.add(new Student("Jerry", 20)); list.add(new Student("Alice", 19)); list.sort(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); //按照年龄升序排序 } }); System.out.println(list); //[Student{name='Tom', age=18}, Student{name='Alice', age=19}, Student{name='Jerry', age=20}] 以上就是JavaList.sort()方法使用方法。 ### 回答2: JavaList是一种存储对象的集合。List的元素是按照顺序存储的,可以对其的元素进行排序操作,常用的排序方法有Collections.sort()和List.sort()两个方法,其List.sort()是Java 8新增的方法List.sort()方法使用非常简单,只需要将需要进行排序的List对象调用该方法即可,如下所示: ``` List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("cherry"); list.sort(null); ``` 上面的代码,创建了一个存储字符串类型元素的List对象,然后添加了三个元素。最后调用list.sort(null)方法进行排序。在上面的代码,null表示使用默认的排序规则,如果需要自定义排序规则,可以通过传递一个Comparator对象进行排序。 按照自然顺序排序: ``` List<Integer> list = new ArrayList<>(); list.add(3); list.add(1); list.add(2); list.sort(null); ``` 按照自定义顺序排序: ``` List<Person> list = new ArrayList<>(); list.add(new Person("Tom", 20)); list.add(new Person("Jack", 18)); list.add(new Person("Lucy", 19)); list.sort((o1, o2) -> o1.getAge() - o2.getAge()); ``` 在上面的代码,创建了一个存储Person对象的List对象,然后通过lambda表达式传递一个Comparator对象,按照Person对象的age属性进行排序。 总之,List.sort()方法使用非常方便,只需要传递一个Comparator对象即可进行自定义排序,该方法Java 8新增的功能,使用起来非常简洁和易懂。 ### 回答3: JavaList是一种集合框架,它被用于存储一组有序的元素。List的数据元素可以是任何对象类型,如基本类型、字符串、自定义类等。JavaList提供了一种排序的方法sort(),用于对List的元素进行排序。 List.sort()方法Java 8新增的方法,主要是用于对List集合的元素进行排序。这个方法接收一个java.util.Comparator参数,用于自定义排序规则。Comparator是一个接口,可以通过实现它来创建排序规则。 List.sort()方法可以使用默认的排序规则,也可以使用自定义的排序规则。如果使用默认的排序规则,List.sort()方法将按升序排序元素。如果使用自定义的排序规则,List.sort()方法将按照自定义的规则对元素进行排序。如果元素不能进行比较,例如某个元素为null,则List.sort()方法将引发NullPointerException异常。 下面是使用List.sort()方法进行排序的一些示例: 1、使用默认排序规则进行排序: List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 4, 2, 5)); list.sort(null); // 使用默认的升序排序规则 System.out.println(list); // 输出:[1, 2, 3, 4, 5] 2、使用自定义排序规则进行排序: List<String> list = new ArrayList<>(Arrays.asList("aaa", "bb", "cccc", "ddddd", "e")); list.sort((s1, s2) -> s1.length() - s2.length()); // 按照字符串长度升序排序 System.out.println(list); // 输出:[e, bb, aaa, cccc, ddddd] 3、使用Comparator.comparing()方法进行排序: List<Student> list = new ArrayList<>(Arrays.asList(new Student("张三", 18), new Student("李四", 20), new Student("王五", 15))); list.sort(Comparator.comparing(Student::getAge)); // 按照年龄升序排序 System.out.println(list); // 输出:[Student{name='王五', age=15}, Student{name='张三', age=18}, Student{name='李四', age=20}] 综上所述,List.sort()方法JavaList集合进行排序的一种快捷方式,它可以使用默认的排序规则或自定义的排序规则来对List的元素进行排序。在使用List.sort()方法时,需要注意元素的比较是否有异常情况的出现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值