Java数组排序分基本类型和引用类型:基本类型用Arrays.sort()(双轴快排/TimSort),引用类型需实现Comparable或传Comparator;降序需包装类+Collections.reverseOrder()或Lambda;如需不修改原数组,应先复制或用Stream.sorted()。

Java数组排序有多种方式,核心取决于数组类型(基本类型或引用类型)和是否需要自定义规则。
基本类型数组用Arrays.sort()
这是最简单直接的方法,底层使用双轴快排(针对int、long等)或TimSort(针对short、char等),效率高且无需额外依赖。
- 对int、double、char等基本类型数组,直接调用Arrays.sort(arr)
- 例如:int[] nums = {3, 1, 4, 1, 5}; Arrays.sort(nums); → 结果为{1, 1, 3, 4, 5}
- 注意:不能传入泛型或Object[],否则编译不通过
对象数组按自然顺序或自定义规则排序
引用类型数组(如String[]、Integer[]、自定义类数组)需实现Comparable接口,或提供Comparator。
- String、Integer等已实现Comparable,可直接Arrays.sort(strArray)
- 自定义类排序:让类实现Comparable
并重写compareTo();或外部传入Comparator - 例如按Person年龄排序:Arrays.sort(people, (a, b) -> Integer.compare(a.age, b.age));
降序排序的常用写法
基本类型不支持直接降序,需先升序再反转,或用包装类+Comparator。
立即学习“Java免费学习笔记(深入)”;
- 推荐用包装类(如Integer[])配合Comparator:Arrays.sort(nums, Collections.reverseOrder());
- 或Lambda:Arrays.sort(nums, (a, b) -> b - a);(仅适用于无溢出风险的整数)
- 对基本类型int[],可排序后手动反转,或转成Integer[]再处理
不修改原数组的“排序副本”
Arrays.sort()是原地排序。如需保留原数组,得先复制。
- 用Arrays.copyOf(arr, arr.length)创建副本再排序
- 或用Stream(Java 8+):int[] sorted = Arrays.stream(arr).sorted().toArray();
- Stream方式更函数式,适合链式操作,但小数组性能略低于Arrays.sort()
基本上就这些。选哪种方式,看你是排int还是String,要不要降序,以及是否允许改动原数组。











