Java 中的 Arrays.sort()

2025年5月14日 | 阅读 7 分钟

在 Java 中,sort() 方法是 `java.util.Arrays` 类中定义的一个静态且重载的方法。它用于对不同类型数组的值进行排序。它被广泛用于按升序组织数据。sort() 方法可以应用于基本数据类型(int、char、double、float 等)和对象类型(String、Integer、Double 等)。请注意,该方法使用 **双枢轴快速排序算法** 对基本数据类型进行排序,使用 **修改后的合并排序算法** 对对象数组进行排序,以确保高效排序。

每个 sort() 方法提供以下两种变体:

  1. 对整个数组进行排序(可以是整数数组或字符数组)
  2. 通过传递起始和结束索引来对特定范围进行排序。
方法描述
sort(byte[] a)将指定的数组按升序数值顺序排序。
sort(byte[] a, int fromIndex, int toIndex)将指定范围的数组按升序排序。
sort(char[] a)将指定的数组按升序数值顺序排序。
sort(char[] a, int fromIndex, int toIndex)将指定范围的数组按升序排序。
sort(double[] a)将指定的数组按升序数值顺序排序。
sort(double[] a, int fromIndex, int toIndex)将指定范围的数组按升序排序。
sort(float[] a)将指定的数组按升序数值顺序排序。
sort(float[] a, int fromIndex, int toIndex)将指定范围的数组按升序排序。
sort(int[] a)将指定的数组按升序数值顺序排序。
sort(int[] a, int fromIndex, int toIndex)将指定范围的数组按升序排序。
sort(long[] a, int fromIndex, int toIndex)将指定范围的数组按升序排序。
sort(Object[] a)根据其元素的自然顺序,将指定的对象数组按升序排序。
sort(Object[] a, int fromIndex, int toIndex)根据其元素的自然顺序,将指定数组的指定范围按升序排序。
sort(short[] a)将指定的数组按升序数值顺序排序。
sort(short[] a, int fromIndex, int toIndex)将指定范围的数组按升序排序。
sort(T[] a, Comparator<? super T> c)根据指定比较器的排序顺序,对指定的对象数组进行排序。
sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)根据指定比较器的排序顺序,对指定数组的指定范围内的对象进行排序。

Arrays.sort() 方法示例

排序基本数据类型数组

示例

编译并运行

输出

Sorted Integer Array: 1, 2, 3, 5, 8, 11, 12, 14, 17
Sorted Float Array: 1.05, 1.2, 2.2, 3.89, 5.4, 5.6, 6.7
Sorted Double Array: 1.5, 2.7, 3.2, 4.8, 5.1, 6.8
Sorted Character Array: a, b, b, c, d, k, l, y

示例:排序子数组

示例

编译并运行

输出

Sorted Integer Array: 12, 8, 5, 1, 3, 11, 14, 17, 2
Sorted Float Array: 1.2, 6.7, 1.05, 2.2, 5.4, 5.6, 3.89
Sorted Double Array: 1.5, 6.8, 2.7, 3.2, 4.8, 5.1
Sorted Character Array: b, a, b, c, d, l, y, k

类似地,我们可以对 short 和 byte 类型的数组进行排序。

示例:排序字符串

示例

编译并运行

输出

[Australia, Austria, London, Paris, South Africa]

示例:使用 Comparator 进行自定义排序

示例

编译并运行

输出

912 Tom New York
917 Peter Amsterdam
1024 Jack Las Vegas

示例:排序 Comparable 接口

示例

编译并运行

输出

912 Tom New York
917 Peter Amsterdam
1024 Jack Las Vegas

要记住的重要事项

  1. 如果没有提供 Comparator,则对象元素应实现 Comparable 接口。
  2. 使用 Comparator.nullsFirst() 或 Comparator.nullsLast() 来安全地处理 null 值。
  3. 当我们只需要排序数组的一个片段时,部分排序非常有用。
  4. 对于大型数组(例如,10,000 个元素),请考虑使用 Arrays.parallelSort()。
  5. 字符串排序使用 Unicode 值。对于区分区域设置的排序,请使用 Collator。

结论

Java 的 Arrays.sort() 方法是一个极其强大且通用的工具,它不仅可以对基本数据类型数组进行排序,还可以对对象数组进行排序。其简单的语法和重载方法使得开发人员能够执行从一维基本数值排序到使用比较器的高级自定义逻辑的任何操作。它通过优化的方法(例如基本类型的双枢轴快速排序)很好地支持广泛的用例场景。

无论您是创建小型实用程序还是更复杂的应用程序,您都会发现 Arrays.sort() 是管理数据、编写更简洁的代码和开发具有更好设计的软件的非常有益的例程。

Java Arrays.sort() 选择题

1. 我们应该使用哪种方法来排序整数类型的子数组?

  1. sort(int[] a)
  2. sort(int[] a, int fromIndex)
  3. sort(int[] a, int fromIndex, int toIndex)
  4. sort(Integer[] a)
 

答案3)

解释:当我们想要将数组的指定范围按升序排序时,我们使用 Arrays.sort(int[] a, int fromIndex, int toIndex)


2. sort() 方法使用哪种算法对基本数据类型进行排序?

  1. 双枢轴快速排序
  2. 枢轴快速排序
  3. 快速排序
  4. 枢轴排序
 

答案1)

解释:sort() 方法使用双枢轴快速排序算法对基本数据类型进行排序。


3. sort() 方法使用哪种算法对对象类型进行排序?

  1. 双枢轴合并排序
  2. 快速排序
  3. 合并排序
  4. 修改后的合并排序
 

答案1)

解释:sort() 方法使用修改后的合并排序算法对对象类型数组进行排序。


4. sort() 方法定义在哪个类中?

  1. io.Arrays 类
  2. util.Arrays 类
  3. lang.Arrays 类
  4. util.Array 类
 

答案2)

解释:sort() 方法定义在 java.util.Arrays 类中。


5. sort() 方法是 Arrays 类的 _______ 方法?

  1. 重载方法
  2. 抽象方法
  3. 静态方法
  4. 仅 1 和 3
 

答案2)

解释:sort() 方法是 Arrays 类的静态且重载的方法。


下一个主题Java Set 转 List