将数组转化为一个列表时,程序员们经常这样做:
List<String> list = Arrays.asList(arr);
Arrays.asList()会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set()、get()、contains()方法,但是没有增加元素的方法,所以它的大小是固定的,想要创建一个真正的ArrayList类,你应该这样做:
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));
java.util.Arrays.ArrayList的类实际声明代码如下
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
java.util.ArrayList的类实际声明代 码如下
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
可见,
(1)java.util.ArrayList和java.util.Arrays.ArrayList同时继承了 AbstractList类,且AbstractList实现了List接口,所以代码 List list = Arrays.asList(arr) 才会成立;
(2)AbstractList同时继承了AbstractCollection类,而AbstractCollection实现了Collection接口,故代码 ArrayList arrayList = new ArrayList(Arrays.asList(arr)); 可以通过参数为Collection类型的构造方法把java.util.Arrays.ArrayList对象转换为java.util.ArrayList对象
(3)java.util.Arrays.ArrayList类有set()、get()、contains()方法,但是没有增加元素的方法,所以它的大小是固定的