ArrayList集合排序方式总结

2023年2月4日09:26:27

前言

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.如果考虑到性能或者是多个条件排序我们可以使用算法进行排序

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

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

详细案例请参照以下文章

排序算法

排序算法实现原理

  • 作者:Tang.Mr
  • 原文链接:https://blog.csdn.net/ScholarTang/article/details/108686221
    更新时间:2023年2月4日09:26:27 ,共 2264 字。