zoukankan      html  css  js  c++  java
  • 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倍

  • 相关阅读:
    numpy数组(一)
    Iterator和Iterable区别:
    jupyter notebook安装相关问题
    Selenium+Headless Firefox配置
    最长不重复子串
    deprecated conversion from string constant to 'char*
    c++求字符串
    原型模式(Prototype)
    工厂方法模式(Factory Method)
    素数序列的生成及其应用(采用了自研的高效算法)
  • 原文地址:https://www.cnblogs.com/ylblikestudyJava/p/12397044.html
Copyright © 2011-2022 走看看