ArrayList排序几种方法

ArrayList是有序的吗?
是的,ArrayList在java中是有序的,其内部
ArrayList本身不具备内置的排序功能,但可以通过java提供的Collections.sort()方法或者java8及以后版本引入的Stream API来进行排序
以下是几种对ArrayList排序的方法:
1.使用Collections.sort()方法配合Comparable接口:如果ArrayList中元素实现了comparable接口(比如Integer,String等已经实现了Comparable的类型),可以直接调用:
2.使用Collections.sort()方法配合Comparator接口:当需要自定义排序规则时,可以创建一个Comparator实现类,并将其作为参数传给Collections.sort()方法
3.使用List的sort()方法(java8以上的版本):java8引入了Lambda表达式和StreamAPI,可以直接在ArrayList上调用sort()方法,并传递一个Comparator
4.使用StreamAPI进行排序(java8以上的版本)

package a_od_test;

import java.util.*;
import java.util.stream.Collectors;

/*
ArrayList是有序的吗?
是的,ArrayList在java中是有序的,其内部
ArrayList本身不具备内置的排序功能,但可以通过java提供的Collections.sort()方法或者java8及以后版本引入的Stream API来进行排序
以下是几种对ArrayList排序的方法:
1.使用Collections.sort()方法配合Comparable接口:如果ArrayList中元素实现了comparable接口(比如Integer,String等已经实现了Comparable的类型),可以直接调用:
2.使用Collections.sort()方法配合Comparator接口:当需要自定义排序规则时,可以创建一个Comparator实现类,并将其作为参数传给Collections.sort()方法
3.使用List的sort()方法(java8以上的版本):java8引入了Lambda表达式和StreamAPI,可以直接在ArrayList上调用sort()方法,并传递一个Comparator
4.使用StreamAPI进行排序(java8以上的版本)
 */
public class Main27_ArrayList_sort {
    public static void main(String[] args) {
//        sort1();
//        sort2();
//        sort3();
        sort4();

    }

    //方法1
    public static void sort1() {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(3);
        list.add(5);
        list.add(4);
        list.add(2);
        //[1, 3, 5, 4, 2]
        System.out.println("排序前: " + list);
        Collections.sort(list);
        //[1, 2, 3, 4, 5]
        System.out.println("排序前: " + list);
    }

    //方法2
    public static void sort2() {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("zs", 16));
        students.add(new Student("ls", 19));
        students.add(new Student("ww", 15));
//        排序前: [Student{name='zs', age=16}, Student{name='ls', age=19}, Student{name='ww', age=15}]
        System.out.println("排序前: " + students);
        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //按姓名排序
//                return o1.name.compareTo(o2.name);
                //按年龄排序
                return Integer.compare(o1.age, o2.age);
            }
        });
//        排序后: [Student{name='ls', age=19}, Student{name='ww', age=15}, Student{name='zs', age=16}]
        System.out.println("排序后: " + students);

    }


    //方法3
    public static void sort3() {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("zs", 16));
        students.add(new Student("ls", 19));
        students.add(new Student("ww", 15));
//        排序前: [Student{name='zs', age=16}, Student{name='ls', age=19}, Student{name='ww', age=15}]
        System.out.println("排序前: " + students);
//        students.sort(Comparator.comparing(student -> student.name));
        students.sort(Comparator.comparing(student -> student.age));
        System.out.println("排序后: " + students);

    }

    //方法4
    public static void sort4() {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("zs", 16));
        students.add(new Student("ls", 19));
        students.add(new Student("ww", 15));
//        排序前: [Student{name='zs', age=16}, Student{name='ls', age=19}, Student{name='ww', age=15}]
        System.out.println("排序前: " + students);
//        List<Student> newStudents = students.stream().sorted(Comparator.comparing(student -> student.name)).collect(Collectors.toList());
        List<Student> newStudents = students.stream().sorted(Comparator.comparing(student -> student.age)).collect(Collectors.toList());
        System.out.println("排序后: " + newStudents);

    }
}

class Student {
    String name;
    int age;
    //构造函数, getter, setter...
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值