Arraylist、Linkedlist、Vector三者的异同
同:三个类都实现了List接口、都存储有序、可重复的数据
异:
ArrayList:List接口主要实现类,线程不安全的(个人理解是操作数据的代码块没有加synchronized),底层用数组实现。
底层实现(jdk8以后)在实例化Arraylist时系统会创建一个空数组,在第一次add时系统会创建一个大小为10的数组。若此次添加导致数组容量不够时,则进行扩容,默认情况下,扩大到原来的1.5倍(代码中:
int newCapacity = oldCapacity + (oldCapacity >> 1);//1.5倍),同时将原数据复制到新数组中。
LinkedList:底层使用双层链表存储实现,插入删除效率高(Arraylist和vector底层均为数组,在实现删除或插入时,需要用后一个代替前一个,依次类推,效率低)linkedlist内部声明了node类型 first和last属性
element为插入元素
Vector(几乎不用,不做具体讨论):List古老实现类,线程安全的,加了同步锁,底层也是数组。1.8中没有进行更新,在实例化时会创建一个大小为十的数组。