1.生成ArrayList我们一般使用无参构造器 即为
List<Object> list= new ArrayList<>(); 第二种则是指定大小 List<Object> list= new ArrayList<>(10);
第一种使用无参构造器创建集合扩容机制:
1.初始化容量为0
2.当第一次添加数据调用 add()方法时候进行判断(这时候扩容为10)
看源码:
for (int i=0;i<10;i++){ list.add(i); }
ArrayList 底层维护一个 elementData 数组 它是 transient 关键字修饰 这个关键字修饰 在编译时不会被序列化 会被忽略
modCount 为操作次数 可以看到是零 证明没有进行操作过,因为我们添加的是 inte 会自动帮我们装箱 为Interge
这里调用了 grow() 判断是否要进行扩容
private static final int DEFAULT_CAPACITY = 10;
初始为0 0+0>>1 等价 0+0/2 还是为0
第一次为空 elementData==DEFAULTCAPACITY_EMPTY_EMEMENTDATA //true
renturn Math.max(10,1); 这里自然返回的是10
再进入 grow()方法 这里 再执行下去 就生成了一个 长度为10的 elementData数组
进行添加第二个数 再进行判断 如下判断
进行 第十一个数的添加 操作 进行判断的
return (newCapacity - MAX_ARRAY_SIZE <= 0) ? newCapacity : hugeCapacity(minCapacity)
在前面 我们的的newCapacity = oldCapacity +(oldCapacity >>1) // old +old/2
返回的就是15 即从 10 -->15 进行了1.5倍的 扩容 此后依旧如此 ,每次进行插入都将会进行判断, 满足条件就会进行扩容.