1.ArrayList的底层是数组,初始容量是10,(空参构造初始化是空数组,第一次添加元素add时候才扩容数组长度为10),当数组满了之后,继续添加元素时,会扩容到原来的1.5倍。
2.ArrayList保存了一个modCount属性,修改集合的操作都会让其自增。如果在遍历的时候modCount被修改,则会抛出异常,产生fail-fast事件。(防止遍历时候进行了增删操作)
3.ArrayList内部还维护了一个size属性,它是用来记录数组中的实际元素个数。
size,modCount,elementData这些成员变量,都注定了ArrayList线程不安全。
4.ArrayList实现了RandomAccess接口,这表明遍历ArrayList使用普通for循环比使用foreach更快。
5.注意elementData使用transient修饰。表明在采用Java默认的序列化机制的时候,被该关键字修饰的属性不会被序列化。而ArrayList类实现了java.io.Serializable接口,即采用了Java默认的序列化机制。但是elementData在网络传输的时候不序列化肯定是不行的,翻看源码会发现ArrayList自己实现了序列化和反序列化的方法。
transient Object[] elementData; // non-private to simplify nested class access