如何对Java中ArrayList存储的对象进行升序或降序排序?
Java ArrayList数字排序实现方法
前置优化
你当前代码使用的是无泛型的原始类型ArrayList,建议先指定泛型为Integer,避免排序过程中出现类型转换异常:
// 把原来的 ArrayList al = new ArrayList(); 替换为 ArrayList<Integer> al = new ArrayList<>(); // 接收输入的代码也对应修改为: Integer ob = sc.nextInt(); al.add(ob);
升序排序实现
导入java.util.Collections包后,直接调用排序方法即可:
// 升序排序(会直接修改原ArrayList的顺序) Collections.sort(al); System.out.println("升序结果:" + al);
如果不想修改原列表的顺序,可使用Stream API生成新的排序后列表(JDK 8及以上支持):
import java.util.List; // ... List<Integer> sortedAscList = al.stream().sorted().toList(); System.out.println("升序结果(原列表不变):" + sortedAscList);
降序排序实现
导入java.util.Collections和java.util.Comparator任意一个即可,两种实现方式:
// 方式1:使用Collections的反转比较器,修改原列表 Collections.sort(al, Collections.reverseOrder()); System.out.println("降序结果:" + al); // 方式2:使用Comparator的反转比较器,修改原列表 al.sort(Comparator.reverseOrder()); // 不修改原列表的实现 List<Integer> sortedDescList = al.stream().sorted(Comparator.reverseOrder()).toList();
完整修改后代码示例
package com.mypackage; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList<Integer> al = new ArrayList<>(); System.out.println("Enter ten numbers"); for (int i = 1; i <= 10; i++) { Integer ob = sc.nextInt(); al.add(ob); } System.out.println("原列表:" + al); // 升序排序 Collections.sort(al); System.out.println("升序结果:" + al); // 降序排序 Collections.sort(al, Collections.reverseOrder()); System.out.println("降序结果:" + al); sc.close(); } }
输入测试用例6、0、3、1、8、10、9、2、7、5后,输出结果为:
原列表:[6, 0, 3, 1, 8, 10, 9, 2, 7, 5] 升序结果:[0, 1, 2, 3, 5, 6, 7, 8, 9, 10] 降序结果:[10, 9, 8, 7, 6, 5, 3, 2, 1, 0]
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

