日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

有关集合转数组与数组转集合的坑

發布時間:2024/3/26 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有关集合转数组与数组转集合的坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近一直忙于 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解決方法

總結

以上是生活随笔為你收集整理的有关集合转数组与数组转集合的坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。