java数组排序

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。

  • 推荐用包装类(如Integer[])配合Comparator:Arrays.sort(nums, Collections.reverseOrder());
  • 或Lambda:Arrays.sort(nums, (a, b) -> b - a);(仅适用于无溢出风险的整数)
  • 对基本类型i

    nt[],可排序后手动反转,或转成Integer[]再处理

不修改原数组的“排序副本”

Arrays.sort()是原地排序。如需保留原数组,得先复制。

  • Arrays.copyOf(arr, arr.length)创建副本再排序
  • 或用Stream(Java 8+):int[] sorted = Arrays.stream(arr).sorted().toArray();
  • Stream方式更函数式,适合链式操作,但小数组性能略低于Arrays.sort()

基本上就这些。选哪种方式,看你是排int还是String,要不要降序,以及是否允许改动原数组。