我一直认为任何数组类型都是不同的类,但似乎任何引用类型数组也被认为是Object []及其超类的数组形式的对象。 (这完全正确吗?)
考虑以下数组
Integer[] numbers = { 20, 15, 10, 5 };
当我将此数组传递给期望Object []值的Arrays.sort时,它可以正常工作。但是Object没有任何比较方法,它如何知道使用哪种比较方法?
答案 0 :(得分:4)
Integer
实现了Comparable<Integer>
,它定义了整数的自然顺序。在没有sort
的情况下调用Comparator
依赖于数组的元素来实现Comparable
,并使用该接口的compareTo
方法。
答案 1 :(得分:0)
Arrays.sort用于原始类型和对象。
根据数组元素类型,使用sort1
对这些进行排序,但这些sort1方法是私有的。
如果你想要对int数组进行排序。所以你将使用方法sort(int[] a)
。它将调用私有方法sort1:
private static void sort1(int x [],int off,int len){...}
此方法说明为Sorts the specified sub-array of integers into ascending order.
mergeSort
方法。 但是当您查看整数类文件时,它会实现Comparable<Integer>
(Remember although it's subclass of Object):
public final class Integer extends Number implements Comparable<Integer>
所以在这里你不想使用Arrays.sort方法。通过使用compareTo(Integer anotherInteger)
方法,可以对数组进行排序。