亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1914 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號