前言

List集合是日常开发中最常用的集合类,没有之一。
在有些场景可能会需要通过程序对集合中的元素进行排序,本文总结一下List集合排序可以通过哪些方式来实现

1.使用集合的工具类Collections对ArrayList集合进行排序

简单的整数型排序:

当集合的范型为Integer类型或者为String类型并且集合中的元素为数字字符串,我们可以使用集合的工具类Collections类来对集合中的元素进行排序。

Code

List<Integer> numbers = new ArrayList<>(); Collections.addAll(numbers,1,3,2,6,4,8,7,9); Collections.sort(numbers); System.out.println("numbers:"+numbers.toString()); //运行结果 --> numbers:[1, 2, 3, 4, 6, 7, 8, 9]  List<String> strNumbers = new ArrayList<>(); Collections.addAll(strNumbers,"1","3","2","6","4","8","7","9"); Collections.sort(strNumbers); System.out.println("strNumbers:"+strNumbers.toString()); //运行结果 --> strNumbers:[1, 2, 3, 4, 6, 7, 8, 9] 

2.使用java8新特性中的stream,将ArrayList集合中的元素流化实现排序

将元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。

Code

//排序整数类型集合中的元素 List<Integer> numbers = new ArrayList<>(); Collections.addAll(numbers, 1, 3, 2, 6, 4, 8, 7, 9); numbers = numbers.stream().sorted(Integer::compareTo).collect(Collectors.toList()); System.out.println("numbers:" + numbers); //运行结果 --> numbers:[1, 2, 3, 4, 6, 7, 8, 9]  //排序其他范型集合中的数据 //比如现在有一个User类型的List集合,要求根据User对象中的age属性对List集合中的User对象进行排序 List<User> userList = new ArrayList<>(); Collections.addAll(userList,                    new User(1,"Jack",25,"男"),                    new User(2,"Jason",24,"男"),                    new User(3,"Jimmy",20,"男"),                    new User(4,"Lucy",19,"男"),                    new User(5,"Tom",21,"男")                   ); userList =userList   .stream()   .sorted(Comparator.comparing(User::getAge).reversed())   //.sorted(Comparator.comparing(User::getAge).reversed()) 加上reversed()方法就是逆序排序   .collect(Collectors.toList()); System.out.println("userList:"+userList.toString()); //运行结果 --> userList:[User{id=4, name='Lucy', age=19, sex='男'}, User{id=3, name='Jimmy', age=20, sex='男'}, User{id=5, name='Tom', age=21, sex='男'}, User{id=2, name='Jason', age=24, sex='男'}, User{id=1, name='Jack', age=25, sex='男'}]  

3.使用比较器对ArrayList集合进行排序

如果方式一和方式二都不能解决的话可以通过比较器来解决。

比如现在有一个ArrayList集合,它的范型是一个Map,要求根据Map元素中的某个Key的Value值对集合中的Map元素进行排序

Code

Collections.sort(mapList, new Comparator<Map<String, Object>>() {   @Override   public int compare(Map<String, Object> o1, Map<String, Object> o2) {     Integer faceValueOne = Integer.valueOf(o1.get("faceValue").toString());     Integer faceValueTwo = Integer.valueOf(o2.get("faceValue").toString());     return faceValueOne.compareTo(faceValueTwo);   } }); 

4.如果考虑到性能或者是多个条件排序我们可以使用算法进行排序

算法排序是衍生于数组的排序,只适用于有索引型集合。

算法排序主要包括:冒泡排序选择排序插入排序二分法排序快速排序堆排序

详细案例请参照以下文章

排序算法

排序算法实现原理