有关集合转数组与数组转集合的坑
最近一直忙于 coding 和進行項目管理,就沒啥時間更新 blog,今天上午趁有時間摸魚,就簡單總結一下有關集合轉數組與數組轉集合的坑。
問題起因1
在寫代碼的時候使用 toArray 方法 的時候就一直很好奇傳入的長度為什么是 0 而不是其他(因為我參照老員工的哈哈哈,cv 戰士),后來 review 代碼的時候重新撿起了這個疑惑,然后翻了翻源碼。
源碼:
@SuppressWarnings("unchecked")public <T> T[] toArray(T[] a) {if (a.length < size)// Make a new array of a's runtime type, but my contents:return (T[]) Arrays.copyOf(elementData, size, a.getClass());System.arraycopy(elementData, 0, a, 0, size);if (a.length > size)a[size] = null;return a;}結論
個人理解應該是這樣描述的 當傳入的泛型數組大小小于集合大小時,使用集合大小,否則,使用數組大小。
然后翻看華山版里面也有說到這個問題,直接放圖吧
問題起因 2
一開始在 coding 中把數組轉集合的過程中,給我報了個錯
java.lang.UnsupportedOperationException網上有很多關于這個報錯的解決方法,在這里我就參考華山版簡單說一下原因吧:
asList 的返回對象是一個 Arrays 內部類,并沒有實現集合的修改方法。Arrays.asList 體現的是適配器模式,只是轉換接口,后臺的數據仍是數組。
網上我覺得比較合理的解釋:
調用Arrays.asList()生產的List的add、remove方法時報異常,這是由Arrays.asList() 返回的市Arrays的內部類ArrayList, 而不是java.util.ArrayList。Arrays的內部類ArrayList和java.util.ArrayList都是繼承AbstractList,remove、add等方法AbstractList中是默認throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重新了這些方法而Arrays的內部類ArrayList沒有重新,所以會拋出異常。
結論
使用工具類 Arrays.asList()把數組轉換成集合時,不能使用其修改集合相關的方法,它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常。
參照:
《Java 開發手冊》—華山版
java.lang.UnsupportedOperationException解決方法
總結
以上是生活随笔為你收集整理的有关集合转数组与数组转集合的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java和hcie_hcie为什么工资这
- 下一篇: [个人笔记]origin学习 数据导入与