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

java LinkedList类库中的方法ToArray()强制类型转换问题?

java LinkedList类库中的方法ToArray()强制类型转换问题?

www说 2018-12-04 10:12:35
今天在练习java集合LinkedList类库中的方法是遇到一个很奇怪的问题,请看下面代码:LinkedList<String> llString=new LinkedList<String>();         String[] s=llString.toArray();Myeclipse报错:Type mismatch: cannot convert from Object[] to String[]于是我进行了强制类型转换,请看代码:LinkedList<String> llString=new LinkedList<String>();         String[] s=(String[]) llString.toArray();编译器不报错了!帮助文档中对LinkedList的ToArray()方法是这么描述的:public <T> T[] toArray(T[] a)返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组;返回数组的运行时类型为指定数组的类型。如果指定数组能容纳列表,则在其中返回该列表。否则,分配具有指定数组的运行时类型和此列表大小的新数组。如果指定数组能容纳列表,并有剩余空间(即数组比列表元素多),则紧跟在列表末尾的数组元素会被设置为 null。(只有 在调用者知道列表不包含任何 null 元素时,才可使用此方法来确定列表的长度。)像 toArray() 方法一样,此方法充当基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许对输出数组的运行时类型上进行精确控制,在某些情况下,可以用来节省分配开销。假定 x 是只包含字符串的一个已知列表。以下代码可用来将该列表转储到一个新分配的 String 数组:     String[] y = x.toArray(new String[0]);注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。上面描述中也举例子, String[] y = x.toArray(new String[0]);没有进行强制转换类型。我的疑问:上面我在声明  llString时,已经使用了范型来防止进行类型转换,为何在ToArray()前还要进行强制类型换换呢?这样范型的作用不久丢失了吗?谢谢!
查看完整描述

2 回答

?
慕斯709654

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

LinkedList<String> llStrings = new LinkedList<String>();        for(int i=0;i<100;i++){
            llStrings.add(""+i);
        }
        String[] arry = new String[llStrings.size()];
        arry = llStrings.toArray(arry);
        System.out.println(arry.length);

这样就可以了,它需要指定要转换的类型

toArray(T[] a) 和toArray()是不一样的。


查看完整回答
反对 回复 2018-12-08
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

LinkedList。toArray()返回的是将LinkedList内部维护的数组拷贝一份返回,客户端可以任意修改。这样确保了内部的数据的安全性。


查看完整回答
反对 回复 2018-12-08
  • 2 回答
  • 0 关注
  • 1951 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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