下面介绍ArrayList的三种初始化
1.无参构造
如果调用的是无参构造 数组其实是空数组 在第一次add的时候开始进行扩容 生成一个默认长度为10的数组。
2.有参构造(int)
直接用传进来的参数当作数组的长度。
3.有参构造(collection)
直接传进来一个collection类型的对象时,会调用toArray()方法,比如:
ArrayList list1 = new ArrayList(1); list1.add(1); list1.add(2); list1.add(3); list1.add(4); ArrayList arrayList = new ArrayList(list1);
内部直接调用 list1.toArray ,将得到的数组赋值给ArrayList内部数组,倘若此处声明的是HashSet也是一样,将hashSet.toArray赋值给内部数组
ArrayList list1 = new ArrayList(1); HashSet hashSet = new HashSet(); list1.add(1); list1.add(2); list1.add(3); list1.add(4); hashSet.addAll(list1); ArrayList arrayList = new ArrayList(hashSet);
*注意此处的HashSet 使用addAll方法时,是使用增强for循环一个一个赋值。
4.关于扩容
每次add添加元素时,会首先用size+1得到一个最小容量,然后用这个容量和数组原有长度进行比较,如果超出原有长度,会进行扩容,扩容的原则是,原有长度+原有长度的一半,如果还不够,就扩容到最小容量。其中扩容操作使用Arrays.copyof
5.应用(此处是B站 上硅谷