最重要的两个属性分别是: elementData
数组,以及 size
大小。
add() 方法的时候:
首先进行扩容校验。
将插入的值放到尾部,并将 size + 1
调用 add(index,e)方法的时候:
也是首先扩容校验。
接着对数据进行复制,目的是把 index 位置空出来放本次插入的数据,并将后面的数据向后移动一个位置
由于 ArrayList 是基于动态数组实现的,所以并不是所有的空间都被使用。因此使用了 transient 修饰,可以防止被自动序列化。
自定义了序列化与反序列化(当对象中自定义了 writeObject 和 readObject 方法时,JVM 会调用这两个自定义方法来实现序列化与反序列化。)
Vector是arrayList的同步版本,add() 方法的时候使用 synchronized 进行同步写数据