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


當使用如下代碼將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


免責聲明!

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



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