JAVA 数组排序方法,Arrays.sort()方法疑问?

此API规定实体bean要实现comparable接口并重写compareTo方法,为什么不将API改为Arrays.sort(Compatable[] com)呢?

阅读 3k
2 个回答

真正的原因是因为Java数组的一个特性导致不得不这样设计。简单来说,Java数组的运行时类型不是由其元素类型决定,而是由其实例化时的类型决定的。

比如下面这个数组:

Object[] arr = {
    "hello", "world"
};

它的实际类型就是Object[](大括号的简写法相当于Object[] arr = new Object[] {...};,因此其实例化类型为Object[])。虽然它里面的元素全部都是字符串,按照直觉你可能会觉得可以把它转换为String[]数组,但其实不然,下面的转换在运行时将会报错:

String[] arr2 = (String[]) arr;
注:如果反过来,将一个String[]数组转换为Object[]数组则是可行的,因为前者是后者的子类型。

所以这会导致什么问题?如果Arrays.sort()声明为接收Comparable[]数组,那么就要求程序员在使用的时候必须一开始就为该数组实例化为一个Comparable[]数组或其兼容数组,而不能等到调用sort()方法的时候再临时转换,因为就像前面的例子那样,这种转换很有可能会失败。

写成Compatable[]的参数,sort方法就只能接收对象为参数,而简单类型就不能用了,如

int [] a ={1,2,3,6,4,3,23,5,6,7,9};

Arrays.sort(a);

//a = [1, 2, 3, 3, 4, 5, 6, 6, 7, 9, 23]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题