为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕工程0101907 2018-07-11 13:03:55
此API规定实体bean要实现comparable接口并重写compareTo方法,为什么不将API改为Arrays.sort(Compatable[] com)呢?
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

写成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]


查看完整回答
反对 回复 2018-07-15
?
RISEBY

TA贡献1856条经验 获得超5个赞

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

比如下面这个数组:

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

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

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

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


查看完整回答
反对 回复 2018-07-15
  • 2 回答
  • 0 关注
  • 426 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号