關於Arrays.asList(T... a)返回”假集合”的講解

首先按住ctrl鍵鼠標點擊asList(ss);
我們發現該方法返回了一個ArrayList集合,我們繼續追蹤源碼
按住ctrl鍵鼠標點擊返回新建的ArrayList集合
我們發現原來返回的並不是集合體系中的ArrayList,而是Arrays類中的一個成員內部類
類名稱和集合體系中的ArrayList相同而已,而我們調用的該方法傳遞的數組,是把數組的地址值賦予了ArrayList的內部的一個成員屬性(private final E[ ] a)
該ArrayList繼承了AbstractList, 打開ArrayList的outline視圖,我們發現該ArrayList並沒有
Add,remove等修改集合長度的方法,說明修改集合長度的方法是繼承了父類的方法,接下來我們再來看一下AbstractList類
果然,我們在AbstractList類中找到了修改集合長度的方法,那我們再進一步看看修改長度的方法,通過源碼我們可知,只要調用了修改長度的方法,就會拋出UnsupportedOperationException()異常,至此,我們就知道了爲什麼,我們調用Arrays.asList(T...a)方法返回的ArrayList修改長度時我拋出UnsupportedOperationException()異常的原因
那爲什麼sun公司爲什麼這個設計呢?  爲什麼不直接返回集合體系中的ArrayList呢?
是因爲我們可以像操作集合一樣操作數據(方便我們的操作),並且還不違背集合的特點,一旦初始化,長度將不可變,

C:\Users\dtf\Desktop\1.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章