如何按降序对 Java ArrayList 进行排序?

2025 年 9 月 1 日 | 阅读 4 分钟

Java 中的 ArrayList 排序可以执行升序或降序排序,前提是 ArrayList 中没有不同类型的元素,并且所有元素都可以相互比较。一旦遇到不同类型的元素,就会抛出 ClassCastException

使用 Collections.sort() 方法对 ArrayList 进行排序

可以使用 Java 中的 Collections 类中的 sort() 方法对 ArrayList 进行排序。此 sort() 方法接受要排序的集合和 Collections.reverseOrder() 作为参数,并返回按数字或字典顺序排序的降序集合。Collections.reverseOrder() 在此方法中充当比较器。

语法

按降序对 ArrayList 进行排序的程序

示例

编译并运行

输出

Before: [Pineapple, Watermelon, Apple, Apricot, Banana, Mango]
After: [Watermelon, Pineapple, Mango, Banana, Apricot, Apple]

说明

在上面的代码中,创建了一个 ArrayList 类的对象,并使用 add() 方法向 ArrayList 中添加了多个字符串。之后,在排序之前打印 ArrayList,执行 sort() 操作,并将 reverseOrder() 作为第二个参数传递,从而得到字典顺序降序排列的 ArrayList 输出。

按降序对整数 ArrayList 进行排序

示例

编译并运行

输出

Before: [44, 16, 99, 56, 88, 36, 1, 25]
After: [99, 88, 56, 44, 36, 25, 16, 1]

使用 Comparator.reverseOrder() 方法对 ArrayList 进行排序

该方法返回一个比较器,该比较器对实现 Comparable 的对象施加自然排序的逆序。

  • 它是 Comparator 接口中的一个静态方法。
  • 它仅适用于实现 Comparable<T> 的对象。
  • 如果任何元素为 null,则抛出 NullPointerException。
  • 返回的比较器是可序列化的。

语法

示例:对 ArrayList 进行排序

示例

编译并运行

输出

Before Sorting: [Java, Python, Javascript, C, Swift, C++, Ruby, Scala]
After Sorting: [Swift, Scala, Ruby, Python, Javascript, Java, C++, C]

说明

在上面的代码中,我们创建了一个 String 类型的 ArrayList 并添加了一些元素。这次我们以不同的方式使用了 Collections 类的 sort() 方法,通过 ArrayList 对象调用 sort() 方法,使用点(.)表示法。在方法内部,我们传递了 Comparator.reverseOrder(),它将按降序对 ArrayList 进行排序,并且我们在按降序排序 ArrayList 之前和之后打印了 ArrayList 的元素。

复杂度分析

ArrayList 的时间复杂度趋向于 O(n log n),而空间复杂度保持为 O(1),因为在执行 ArrayList 排序时没有使用额外的空间。

Java ArrayList 排序选择题

Q1. Collections.reverseOrder(Comparatorcmp) 在 Java 中做什么?

  1. 根据比较器按升序对集合进行排序
  2. 使用自然顺序对集合进行排序
  3. 根据提供的比较器按降序对集合进行排序
  4. 反转列表而不排序
 

答案:C

解释: Collections.reverseOrder(Comparatorcmp) 方法返回一个比较器,该比较器对给定比较器指定的排序施加逆序。


Q2. collections.sort() 方法的时间复杂度是多少?

  1. O(n)
  2. O(log n)
  3. O(n log n)
  4. O(n2)
 

答案:C

解释: ArrayList 的时间复杂度趋向于 O(n log n),而空间复杂度保持为 O(1)。


Q3. 在 ArrayList 排序中,相互可比较是什么意思?

  1. 所有元素必须是不同类型
  2. 所有元素必须是相同类型
  3. 仅比较相同类型的元素并忽略其他类型的元素
  4. 以上都不是
 

答案: B

解释: 相互可比较意味着为了排序,所有元素必须是相同类型,否则会遇到 ClassCastException。


Q4. 我们可以对自定义对象的 ArrayList 进行排序吗?

  1. 不能
  2. 是的
  3.  
  4. 以上都不是
 

答案: B

解释: 是的,我们可以通过实现自定义类中的 Comparable 接口来定义自然排序,或者通过使用 Collections.sort() 方法提供自定义比较器来对包含自定义对象的 ArrayList 进行排序。


Q5. 使用什么方法可以按反序对 ArrayList 进行排序?

  1. Collections.reverseOrder()
  2. Arrays.sort()
  3. A 和 B 均可
  4. 以上都不是
 

答案: A

解释: 将 Collections.reverseOrder() 作为参数传递给 sort() 方法,以返回按降序排序的 ArrayList。