Arrays.asList()源碼解析--UnsupportedOperationException異常原因

1.asList()

String arr[] = {"a", "b", "c", "d", "e"};
List<String> list = Arrays.asList(arr);

asList方法源碼

可以看到這裏的 new ArrayList<>(a) 調用的是java.util.Arrays類的一個內部類。

且a=Objects.requireNonNull(array);可以看到list數組是指向arr數組

2.add()、remove()

內部類ArrayList<E>並沒有重寫add和remove方法,會默認執行父類add和remove方法。

下面是AbstractList<E>add源碼

可以看到會拋出UnsupportedOperationException異常

java.lang.UnsupportedOperationException

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)

3.set()

 public static void main(String[] args) {
        String arr[] = {"a", "b", "c", "d", "e"};
        List<String> list = Arrays.asList(arr);
        list.set(0,"a1");
        arrayToString(arr);
        System.out.println("list:"+list.toString());
    }
輸出:
[a1,b,c,d,e]
list:[a1, b, c, d, e]

當改動其中一個對象時,另一個也會同時變動。

4.數組轉新集合的正確姿勢

public static void main(String[] args) {
        String arr[] = {"a", "b", "c", "d", "e"};
        List<String> list = new ArrayList<>(Arrays.asList(arr));
    }

 

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