Arrays.asList()是個坑

gamebus發表於2021-09-09

在java語言中,把陣列轉換成List集合,有個很方便的方法就是 List list = Arrays.asList("a","b","c");

但你可能不知道這樣得到的List它的長度是不能改變的。當你向這個List新增或刪除一個元素時(例如 list.add("d");)程式就會丟擲異常(java.lang.UnsupportedOperationException)。怎麼會這樣?!只需要看看asList()方法是怎麼實現的就行了。

public static List asList(T... a) {
return new ArrayList(a);
}

當你看到這段程式碼時可能覺得沒啥問題啊,不就是返回了一個ArrayList物件嗎?問題就出在這裡。這個ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,顯然它是Arrays類自己定義的一個內部類!這個內部類沒有實現add()、remove()方法,而是直接使用它的父類AbstractList的相應方法。而AbstractList中的add()和remove()是直接丟擲java.lang.UnsupportedOperationException異常的!

總結一下吧,如果你的List只是用來遍歷,就用Arrays.asList()吧!如果你的List還要新增或刪除元素,還是乖乖地new一個java.util.ArrayList,然後一個一個的新增元素吧!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2808504/,如需轉載,請註明出處,否則將追究法律責任。

相關文章