Arrays.sort()是否实现Comparable?未实现时其排序功能是如何工作的?
问题解答
核心误区澄清:Arrays是JDK提供的数组工具类,你调用的Arrays.sort()是它的静态工具方法,排序的对象是你传入的数组的内部元素,从来不需要Arrays类本身实现Comparable接口。
你示例中的排序运行逻辑如下:
- 你使用的是
int基础类型数组:Arrays.sort对8种基础类型(int、long、char等)的数组都有专属的重载实现,底层直接比较基础类型的数值大小即可完成排序,不需要依赖Comparable接口,JDK 7+默认采用双轴快排算法实现基础类型数组排序。 - 如果后续你需要对引用类型数组排序,有两种可选方案:
- 方案1:引用元素的类实现
Comparable接口,重写compareTo方法定义排序规则,Arrays.sort会自动调用该方法完成元素比较 - 方案2:调用带
Comparator参数的Arrays.sort重载方法,直接传入自定义比较器定义排序规则,不需要元素类实现Comparable接口
- 方案1:引用元素的类实现
引用类型排序的示例代码参考:
// 自定义类实现Comparable接口示例 class Student implements Comparable<Student> { private int score; public Student(int score) { this.score = score; } public int getScore() { return score; } @Override public int compareTo(Student other) { // 定义按分数升序排序的规则 return this.score - other.score; } } // 调用排序的代码 Student[] students = new Student[]{new Student(85), new Student(60), new Student(92)}; Arrays.sort(students); // 自动调用Student的compareTo方法排序
内容的提问来源于stack exchange,提问作者Sreekumar Sachidanandan
相关产品推荐
相关产品推荐

