zoukankan      html  css  js  c++  java
  • LinkedList、ArrayList、Vector三者的关系与区别?

    LinkedList、ArrayList、Vector三者的关系与区别?

    区分ArrayList,Vector,LinkedList的区别
    ArrayList,Vector的区别:
    1.出现版本:
    ArrayList(1.2),Vector(1.0),Collection(1.2),也就是说Vector出现的更早(老版本的动态数组,与HashTable一样在jdk1.0)
    Vector:elementData,当执行构造方法时候初始化大小为10
    ArrayList:调用无参构造(elementData),初始化大小为空

    2.初始化策略区别:
    Vector在调用无参构造执行后将对象数组初始化为10
    ArrayList采用懒加载策略,在构造方法阶段并不初始化对象数组,在第一次添加元素的时候才初始化对象数组(add方法)

    3.扩容策略:
    ArrayList扩容的时候,新数组大小变为原数组大小的1.5倍
    Vector扩容的时候,新数组大小变为原数组的2倍

    4.线程安全性:
    ArrayList采用异步处理,线程不安全,效率较高
    Vector采用在方法上加锁,线程安全,效率较高(即便要使用线程安全的List,也不要用Vector)

    5.遍历:
    Vector支持较老的迭代器Enumeration
    ArrayList不支持



    ArrayList,Vector的共同点;
    底层均使用数组实现

    ArrayList,LinkedList:
    LinkedList底层采用双向链表实现,所以不存在扩容,初始化问题,并且add方法没有加锁,所以它和ArrayList一样同为异步实现
    ArrayList底层采用数组实现

    a、LinkedList、ArrayList、Vector都是List接口的字类,其中LinkedList基于双向链表实现,ArrayList和Vector基于数组实现

    b、ArrayList采用懒加载模式,在第一次添加元素的时候,初始化内部数组,初始大小为10,扩容大侠为原先为1.5倍,采用异步处理,线程不安全,性能较高,在80%的场景下应用

    c、Vector在产生对象时候初始化大小为10的内部数组、扩容为原先的2倍,采用synchronized修饰常用的增删查改方法,线程安全,性能较低(读读互斥)

    Stack是Vector的子类

    d、常见的插入删除在尾部ArrayList比较快,在指定位置的时候,LinkedList比较快,在任意位置的插入与删除会考虑使用LinkedList(因为LInkedList是链表,指定位置快,而ArrayList需要将插入元素以后的元素整体向后挪动)

    额外备注:

    LinkedList实现Deque接口,Deque接口继承Queue,所以,LinkedList也实现了Queue接口

    ArrayList继承AbastactList

    Arrays.copyOf() , Arrays.sort() , Arrays.aslist

  • 相关阅读:
    平衡树板子
    51nod1201 整数划分
    时态同步[ZJOI2007]
    玉米田Corn Fields
    中国象棋[AHOI2009]
    孤岛营救与汽车加油行驶问题
    运输问题
    航空路线问题(dp解法)
    最小路径覆盖
    后缀排序(后缀数组初探
  • 原文地址:https://www.cnblogs.com/hetaoyuan/p/11239301.html
Copyright © 2011-2022 走看看