ArrayList是一个数组队列,相当于动态数组,通过数组实现的,能够动态的增长。是线程不安全的。继承了AbstractList,实现了LIst,RandomAccess,Cloneable,java.io.Seriable接口,
继承AbstractList,实现了List接口。它是一个数组队列,提供了相关的增删改查,遍历等操作。
实现了RandomAccess接口,提供了随机访问接口。RandomAccess接口是java中用来被List实现,为List提供快速访问功能。(RandomAccess接口中是空的,应该是一个标记接口,用于判断一个list集合,是否实现了RandomAccess接口,是可以一个方法,不是另一个方法)为了让我知道用什么方式去获取数据性能更好。
实现了Clineable接口,就可以使用Object.clone()f方法。
实现Serializable接口,实现序列化,表明该类可以被序列化,就是能够变成字节流传输,然后还能从字节流变成原来的类。
List接口下有两个实现,一个是Vector,这个加了synachronized来保证同步,一个是ArrayList是高效的线程不安全的集合。
DEFAULT_CAPACITY = 10;因此调用无参构造时默认长度是10; 自动扩容grow方法: int newCapacity = oldCapacity + (oldCapacity >> 1 就是变成1.5倍长。 elementData = Arrays.copyOf(elementData, newCapacity); 新的容量确定好后用copyof方法 copy数组。
add(int index,E element) 指定位置插入 调用了System.arrayCopy()将后面的元素后移一位 复杂度O(n)
remove和add有异曲同工之处。
总结
1ayyayList 可以存放null;
2arrayList和数组最大的区别就在于自动扩容grow()方法;
3arrayList适合查询,不适合删除。