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