ArrayList提供了一个将List转为数组的方法toArray。toArray有两个重载的方法:
(1)list.toArray();
(2)list.toArray(T[] a);
对于第一个重载方法,是将list直接转为Object[] 数组;
第二种方法是将list转化为特定类型的数组。
经常会出现下面这种错误(一运行就报错):
ArrayList ary=new ArrayList();
ary.add(new heros("盖伦"));
ary.add(new heros("狗熊"));
heros[] hs= (heros[]) ary.toArray();
原因:不能将Object[] 转化为heros[],转化的话只能是取出每一个元素再转化。
java中的强制类型转换只是针对单个对象的,将整个数组转换成另外一种类型的数组是不行的,这和数组初始化时需要一个个来也是类似的。像这样:
Object[] hs = ary.toArray();
for (int i = 0; i < hs.length; i++) {
heros e = (heros) hs[i];
System.out.println(e);
}
所以第一个重构方法就不是那么好使了。
实际上,将list转化为array的时候,第二种重构方法更方便,用法如下:
heros[] array =new heros[ary.size()];
ary.toArray(array);
参数要是一个实例化了的对象,类作参数是不行的。
参数也可以两种形式表现
一种是如上图所示,先实例化一个数组,数组变量作参数,则array数组里面保存了list转化为数组的信息,还可以再传递给另一个数组,则;
heros[] hs = (heros[]) ary.toArray(gs);
通过
System.out.println(gs==hs);
返回结果是true可知,此时gs和hs两个数组引用相同,指向同一个地址。
另一种如下所示:
heros[] js = (heros[]) ary.toArray(new heros[ary.size()]);
参数里实例化一个数组
要将toArray方法的结果传递给变量,需要再强制类型转换一次。