集合類的toArray方法坑


集合類的toArray()方法相信大家都不陌生,它的作用是將集合轉換成數組。但是這個方法有一個弊端,當toArray()方法使用不當時會產生ClassCastException(類轉換異常)!

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("張三");
    list.add("李四");
    list.add("王五");
    // 下面這行代碼就會產生類轉換異常。
    String[] strArray = (String[]) list.toArray();
    for (String item : strArray) {
      System.out.println(item);
    }
}

//報錯
原因為list.toArray()返回的是Object類型,強制轉換的時候發生ClassCastException
 
        

解決方案:toArray()方法的重載方法toArray(T[] a)。

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("張三");
    list.add("李四");
    list.add("王五");
    // 傳入一個String類型的數組。
    String[] strArray = list.toArray(new String[0]);
    for (String item : strArray) {
        System.out.println(item);
    }
}

注意事項:

注意入參數組空間大小的設置:

1、數組空間等於0時,將會動態的創建和集合size相同空間大小的數組,性能是最好的。
2、數組空間大於0但是小於size時,會重新創建大小等於集合size的數組,此時會增加GC的負擔。
3、數組空間等於集合的size時,在普通情況下是沒問題的,但是在高並發情況下,數組創建完成后,集合的size變大,此時影響跟第二條相同。
4、數組空間大於集合的size時,一方面會造成空間浪費,另一方面會在使用數組時產生空指針的異常。因為多出來的空間會存入null。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM