总结:
ArrayList是List接口的一个数组的实现,随着向ArrayList中不断添加元素,其容量也自动增长
非同步,线程不安全
允许null元素,允许重复元素
iterator和listIterator方法返回的迭代器是快速失败的。(快速失败fail-fast:在创建迭代器之后,除非通过迭代器自身的remove或add方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险)
继承关系
ArrayList基于数组来实现,所以有数组的特性,查找效率高,插入、删除效率低。因为可以通过下标来查找元素,每次添加删除元素的时候会移动其它元素。
ArrayList有扩容机制,也就是当添加元素的时候会校验是否需要扩容,第一次添加元素的时候会将数组长度置为10,之后添加元素的时候会判断当前所需数组长度和当前数组长度,如果两者相减大于零,就会扩大容量为原来的1.5倍。而后会用Arrays.copyOf();将元素拷贝到一个新数组完成扩容,所以ArrayList每次扩容,都会执行以上拷贝操作,这会十分耗时,所以要尽量少让ArrayList自动扩容,尽量用在能确定元素个数的情况下。
总结:
LinkedList是List接口的一个双向链表实现,因此查询效率低,添加、删除元素效率高。
非同步,线程不安全
允许重复,可以存储null元素
继承关系
总结:
Vector和ArrayList相似,是动态数组实现的,能够自动扩容
Vector里很多方法都用了synchronized修饰,线程安全
允许重复,可以存储null元素
快速查询和修改效率高,增加和删除元素效率低
继承关系