集合類的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。