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倍

  • 相关阅读:
    jQuery知识点
    mysql基本命令
    正则表达式
    vue跨域解决方法
    字符串反转
    两个数组的交集
    删除排序数组中重复项
    缺失的第一个正整数
    275. H 指数 II
    274. H 指数
  • 原文地址:https://www.cnblogs.com/ylblikestudyJava/p/12397044.html
Copyright © 2011-2022 走看看