1. 程式人生 > >Warning: Call to 'toArray()' with pre-sized array argument 'new String[list.size()]'

Warning: Call to 'toArray()' with pre-sized array argument 'new String[list.size()]'

方法 str log 調用 blog save -s data ray

當使用如下代碼將List轉換為Array類型時:

List<String> list = new ArrayList<>();
String[] array = list.toArray(new String[list.size()]);

會出現提示

Call to ‘toArray()‘ with pre-sized array argument ‘new String[list.size()]‘
Inspection info: There are two styles to convert a collection to an array: either using a pre
-sized array (like c.toArray(new String[c.size()])) or using an empty array (like c.toArray(new String[0]).

轉換集合為數組的時候,有兩種方式:使用初始化大小的數組(這裏指的是初始化大小的時候使用了集合的size()方法)和空數組。

在低版本的 Java 中推薦使用初始化大小的數組,因為使用反射調用去創建一個合適大小的數組相對較慢。但是在 openJDK 6 之後的高版本中方法被優化了,傳入空數組相比傳入初始化大小的數組,效果是相同的甚至有時候是更優的。因為使用 concurrent 或 synchronized 集合時,如果集合進行了收縮,toArray()和size()方法可能會發生數據競爭,此時傳入初始化大小的數組是危險的。

因此在高版本的 Java 上面可以改為:

List<String> list = new ArrayList<>();
String[] array = list.toArray(new String[0]);

參考:https://blog.csdn.net/QasimCyrus/article/details/88674516

Warning: Call to 'toArray()' with pre-sized array argument 'new String[list.size()]'