登录
首页 >  文章 >  java教程

Java中Collections.sort排序详解

时间:2025-09-30 20:51:35 104浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习文章的朋友们,也希望在阅读本文《Java中使用Collections.sort排序方法》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新文章相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

Collections.sort()用于列表排序,支持自然排序与自定义Comparator;可对String、Integer等实现Comparable的类型直接排序,也可通过实现Comparable接口或传入Comparator对自定义对象(如Person)按属性排序,Java 8后可用lambda表达式简化写法,底层采用稳定Timsort算法,要求列表可修改且非null,适用于RandomAccess或LinkedList结构。

如何在Java中使用Collections.sort排序

在Java中,Collections.sort() 是一个非常常用的方法,用于对列表(List)中的元素进行排序。它位于 java.util.Collections 类中,支持对实现了 Comparable 接口的对象进行自然排序,也支持通过自定义的 Comparator 实现灵活排序。

1. 对基本类型包装类排序

Java 中像 String、Integer 等类已经实现了 Comparable 接口,因此可以直接使用 Collections.sort() 进行自然排序。

List names = new ArrayList<>();
names.add("Alice");
names.add("Charlie");
names.add("Bob");

Collections.sort(names); // 按字母顺序排序

System.out.println(names); // 输出: [Alice, Bob, Charlie]

2. 对自定义对象排序(实现 Comparable)

如果你有一个自定义类(如 Person),可以通过让该类实现 Comparable 接口来定义默认排序规则。

class Person implements Comparable {
  private String name;
  private int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  @Override
  public int compareTo(Person other) {
    return Integer.compare(this.age, other.age); // 按年龄升序
  }

  @Override
  public String toString() {
    return name + "(" + age + ")";
  }
}

使用示例:

List people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 20));
people.add(new Person("Charlie", 25));

Collections.sort(people);
System.out.println(people); // 按年龄排序输出

3. 使用 Comparator 自定义排序规则

如果不希望修改类本身,或需要多种排序方式,可以传入 Comparator 作为参数。

// 按姓名排序
Collections.sort(people, new Comparator() {
  @Override
  public int compare(Person p1, Person p2) {
    return p1.getName().compareTo(p2.getName());
  }
});

// Java 8 以后更简洁的写法:
people.sort(Comparator.comparing(Person::getName));

还可以实现逆序:

Collections.sort(people, Comparator.comparing(Person::getAge).reversed());

4. 注意事项

使用 Collections.sort() 时需注意以下几点:

  • 列表必须是可修改的,并且不能包含 null 元素(除非 Comparator 明确处理 null)
  • 排序算法是稳定的,意味着相等元素的相对顺序不会改变
  • 底层使用的是经过优化的归并排序(Timsort),时间复杂度为 O(n log n)
  • 要求列表实现 RandomAccess 接口或为 LinkedList,否则性能可能下降
基本上就这些。只要对象能比较,不管是自然顺序还是自定义规则,Collections.sort 都能搞定。

今天关于《Java中Collections.sort排序详解》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>