ArrayList LinkedList vector的区别

ArrayList():List主要实现类,效率高,线程不安全

特别注意:ArrayList在实际开发中建议,使用带参数的构造器,指明底层数组的长度,避免不必要的扩容

    ArrayList和vector底层都是使用数组实现

 源码分析: 

jdk7:  List list =new ArrayList();   //elementData =new Object[10];

      list.add(1);  //elementData[0]=1;

  ............

     当我们添加第11个元素时,需要考虑扩容:扩容为原来的1.5倍,同时需要将原有的数组的数据拷贝到新的数组

总结:ArrayList在jdk7中的创建和添加时,类似于饿汉模式,在创建ArrayList时创建长度为10的数组,再添加元素时,考虑扩容为  1.5倍

jdk8:  List list =new ArrayList();   //elementData ={};

      list.add(1);  //此时才创建了长度为10的Object数组,同时将元素添加到索引为0的数组位置

  ............

     当我们添加第11个元素时,需要考虑扩容:扩容为原来的1.5倍,同时需要将原有的数组的数据拷贝到新的数组

总结:ArrayList在jdk8中的创建和添加时,类似于懒汉模式,在第一次添加元素时,才创建长度为10的数组,当扩容时,考虑扩容  为1.5倍

LinkedList:双向链表结构,对于频繁的删除插入操作使用

  LinkedList的双链表结构:

    源码中存在Node结构他其中有三个属性(next--->上一个,  E---->当前位置本身, prev--->下个)

    在添加元素时星进入的元素中的next指向上一个元素的E,新添加元素的prev指向下一个元素的E,方构成双向链表

 

 

 

Vector:古老实现类,效率低,线程安全

jdk7,jdk8:    List list =new  Vector():两版本的底层都是先创建了长度为10的数组

      总结:Vector较为古老,两个版本的扩容都为原来的2倍

posted @ 2020-03-02 17:54  我的二天  阅读(164)  评论(0编辑  收藏  举报