How to Sort ArrayList in Java

2025年4月6日 | 阅读 7 分钟

在 Java 中,Collection 是一个框架,它提供了接口(Set、List、Queue 等)和类(ArrayList、LinkedList 等)来存储对象的组。这些类以无序的方式存储数据。有时我们需要以有序的方式排列数据,这称为排序。排序可以有两种方式,即升序或降序。

在本节中,我们将学习如何在 ArrayList 中按升序和降序排序。

ArrayList

Java 中,ArrayList 是 Collections 框架的一个类,它定义在 java.util 包中。它继承了 AbstractList 类。它动态地存储元素。ArrayList 的优点是它没有大小限制。它比传统的数组更灵活。它可能包含重复的元素。由于它实现了 List 接口,我们还可以使用 List 接口的所有方法。

我们可以通过两种方式对 ArrayList 进行升序和降序排序。Collections 类提供了两种方法来排序 Java 中的 ArrayList

  • sort()
  • reverseOrder()

Collections.sort() 方法

可以使用 Collections 类sort() 方法对 ArrayList 进行排序。它接受一个 ArrayList 对象作为要排序的参数,并返回一个根据其元素自然顺序排序的 ArrayList。

语法

请记住: ArrayList 中的所有元素都必须是可相互比较的,否则会抛出 ClassCastException。这里,可相互比较意味着列表必须具有相同类型的元素。例如,考虑以下代码片段

在上面的示例中,我们看到一个列表有四个元素,其中三个是 String 类型,一个 Integer 类型。三个 String 类型的元素可以相互比较,但 Integer 类型的元素与其他三个不可比较。因此,列表中必须具有相同类型的元素。

Collections.reverseOrder() 方法

如果我们想按降序对 ArrayList 进行排序,Java Collections 类提供了 reverseOrder() 方法。它允许我们以反向词典顺序对 ArrayList 进行排序。

语法

它返回一个比较器,该比较器对实现了 Comparable 接口的对象的集合施加自然顺序的相反顺序。

请记住,我们不直接调用 reverseOrder() 方法。我们将其与 Collection.sort() 方法一起使用,如下所示。

因此,ArrayList 的降序排序分为两步:首先,ArrayList 按升序对数据进行排序,然后,使用 reverseOrder() 方法反转排序后的数据。

让我们创建按升序排序 ArrayList 的程序。

按升序排序 ArrayList

在下面的示例中,我们创建了一个 String 类型的 ArrayList 并向其中添加了一些元素。之后,我们调用 Collections 类的 sort() 方法,并将 ArrayList 类的对象(即 list)传递进去,从而按升序对元素进行排序。

// 文件名: SortArrayListExample1.java

输出

Before Sorting: [Volkswagen, Toyota, Porsche, Ferrari, Mercedes-Benz, Audi, Rolls-Royce, BMW]
After Sorting: [Audi, BMW, Ferrari, Mercedes-Benz, Porsche, Rolls-Royce, Toyota, Volkswagen]

让我们来看另一个对 Integer 类型 ArrayList 进行排序的示例。

SortArrayListExample2.java

输出

ArrayList Before Sorting:
55
34
98
67
39
76
81
ArrayList After Sorting:
34
39
55
67
76
81
98

按降序排序 ArrayList

在下面的示例中,我们创建了一个 String 类型的 ArrayList 并向其中添加了一些元素。之后,我们调用 reverseOrder() 方法以及 Collections 类的 sort() 方法,并将 ArrayList 类的对象(即 list)传递进去,从而按降序对元素进行排序。

SortArrayListExample3.java

输出

Before Sorting: [Data Science, Testing, C#, Basic Language, UML, Algorithms, Computer Networks, Python]
After Sorting: [UML, Testing, Python, Data Science, Computer Networks, C#, Basic Language, Algorithms]

SortArrayListExample4.java

输出

ArrayList Before Sorting:
566
230
123
110
689
12
95
ArrayList After Sorting:
689
566
230
123
110
95
12

实现 Comparable 接口

如果您有一个自定义类,并且想对 ArrayList 中的该类对象进行排序,您可以使该类实现 Comparable 接口。此接口要求实现 compareTo() 方法,该方法定义对象的自然顺序。

这是一个使用 Comparable 接口对自定义对象列表进行排序的示例

文件名:ImplementingCompartable.java

输出

Sorted ArrayList: [Student{name='Alice', age=20}, Student{name='Bob', age=22}, Student{name='Charlie', age=21}]

使用 Comparator 接口

如果您想根据除自然顺序以外的标准对对象进行排序,可以使用 Comparator 接口。此接口要求实现 compare() 方法,该方法根据指定标准比较两个对象。

这是一个使用 Comparator 对自定义对象列表进行排序的示例

文件名:UsingComparator.java

输出

Sorted ArrayList: [Student{name='Alice', age=20}, Student{name='Bob', age=22}, Student{name='Charlie', age=21}]

结论

在 Java 中排序 ArrayList 是一项基本操作,可以通过各种技术实现。无论我们处理内置类型还是自定义对象,Java 都提供了灵活的方法来高效地排序集合。通过理解这些技术,我们可以有效地管理和操作 Java 程序中的数据。


Java 排序 ArrayList 选择题

1. 在 Java 中,使用哪种方法对 ArrayList 进行排序?

  1. Arrays.sort()
  2. Collections.sort()
  3. Sort.arraylist()
  4. Arraylist.sort()

答案:b

解释: Collections.sort() 方法用于在 Java 中对 ArrayList 进行排序。如果元素实现了 Comparable 接口,它会按自然顺序对它们进行排序。


2. 如何根据特定字段对自定义对象的 ArrayList 进行排序?

  1. 通过在自定义类中实现 Comparable
  2. 通过使用自定义 Comparator
  3. a 和 b 都是
  4. 通过不带任何参数地使用 Collections.sort()

答案:c

解释: 我们可以通过在自定义类中实现 Comparable 接口或使用自定义 Comparator 来按特定字段对自定义对象的 ArrayList 进行排序。


3. 以下代码的输出是什么?

  1. [3, 1, 4, 1, 5, 9]
  2. [1, 1, 3, 4, 5, 9]
  3. [9, 5, 4, 3, 1, 1]
  4. [1, 3, 4, 1, 5, 9]

答案:b

解释: 该代码将 ArrayList 按升序排序,结果为 [1, 1, 3, 4, 5, 9]。


4. 如何对字符串的 ArrayList 进行排序,忽略大小写差异?

  1. 使用带有自定义 Comparator 的 Collections.sort()
  2. 直接使用 Collections.sort()
  3. 使用 Arrays.sort()
  4. 使用 ArrayList.sort()

答案:a

解释: 要对字符串的 ArrayList 进行排序,同时忽略大小写差异,您可以使用带有自定义 Comparator 的 Collections.sort(),该 Comparator 实现不区分大小写的比较。


5. 哪个 Comparator 方法用于按相反顺序排序?

  1. Collections.reverseOrder()
  2. Comparator.reverse()
  3. Collections.descendingOrder()
  4. ArrayList.reverse()

答案:a

解释: Collections.reverseOrder() 方法返回一个按相反顺序对元素进行排序的 Comparator。


下一个主题Java ArrayList