zoukankan      html  css  js  c++  java
  • ArrayList、Vector、LinkedList的区别

    1.底层数据结构:

      ArrayList  底层实现是动态数组

      Vector   底层实现是动态数组

      LinkedList  底层实现是双链表  

     2.扩容机制:

      ArrayList    底层是动态数组存在扩容说法,默认的数组大小是10,在检测是否需要扩容后,如果扩容,会扩容为原来的1.5倍大小。原理就是把老数组的元素存储到新数组里面。

      Vector     底层是动态数组存在扩容说法,默认的数组大小是10,在检测是否需要扩容后,如果扩容,会扩容为原来的2倍大小。原理就是把老数组的元素存储到新数组里面。

      LinkedList    不存在扩容的说法,因为是链表结构。 

    3.线程安全:

      ArrayList  在单线程环境下是安全的,多线程环境下不是线程安全的,容易造成脏读的问题,如果要使ArrayList是线程安全的,那么可以选择使用Collections.synchronizedList(new ArrayList())

      Vector      是线程安全的,即它大部分的方法都包含关键字synchronized,但是Vector的效率没有ArraykList和LinkedList高

      LinkedList   在单线程环境下是安全的,多线程环境下不是线程安全的,容易造成脏读的问题,如果要使LinkedList是线程安全的,那么可以选择使用Collections.synchronizedList(new LinkedList())

    4.插入和删除:

      ArrayList  因为是一块连续的内存存储数据元素,所以如果要删除或者插入一个元素,那么之前或者之后的元素都要移动,代价很高。

      Vector      这点和ArrayList相同。

      LinkedList   底层是双链表,对于插入或者删除元素来说,操作方便,性能高。

     5.查找:

      ArrayList  查找性能好,因为底层是数组,适用于查找元素。

      Vector      这点和ArrayList相同。

      LinkedList   是双链表,在内存中可以是不连续的,通过指针连接结点,如果要查找元素,必须去遍历整个链表,这样就比较麻烦。

    6.内存空间占用:

      ArrayList  空间浪费主要体现在list列表的结尾会预留一定的容量空间。

      Vector      这点和ArrayList相同。

      LinkedList   花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)。

    总结:

    线程安全: Vector线程安全但是性能低,因此在不需要保证线程安全时建议使用Arraylist而不是Vector;

    查找:   Arraylist性能高于LinkedList。

    添加和删除:LinkedList性能高于Arraylist。

     

  • 相关阅读:
    ORM轻量级框架---ActiveAndroid
    面向对象系列一(继承)
    【Android自己定义View实战】之自己定义超简单SearchView搜索框
    POJ 2367:Genealogical tree(拓扑排序)
    计算客 商品推荐走马灯(简单)(求区间全部连续的回文串价值)
    供电电路切换与锂电池充电电路设计
    锂电池充电电路及电源自动切换电路的设计
    电池和Adapter切换电路改进实验(转)
    串口通信中ReadFile和WriteFile的超时详解!
    CRC算法与实现
  • 原文地址:https://www.cnblogs.com/yuki67/p/12073677.html
Copyright © 2011-2022 走看看