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));
}