美文网首页Android面试
Java:ArrayList、LinkedList、Vector

Java:ArrayList、LinkedList、Vector

作者: d26168ad953a | 来源:发表于2016-12-16 23:03 被阅读80次

    先看看他们继承结构
    Collection
      ------List
      ----LinkedList
      ----ArrayList
      ----Vector

    1、ArrayList
    ArrayList类的定义为:

    public class ArrayList<E> extends AbstractList<E> 
          implements List<E> ,RandomAccess,Cloneable,Serializable
    

    ArrayList 有如下特性:
      *可变大小的数组
      *非线程安全
      *当更多的元素加入到ArrayList 时,其大小会动态的增长。每次增长的空间是其size的50%。
      *初始容量是10
      *允许null元素

    2、LinkedList
    LinkedList类定义:

    public class LinkedList<E> extends AbstractSequentialList<E>  
          implements List<E>, Deque<E>, Cloneable, Serializable
    

    LinkedList有如下特性:
      *是一个双链表
      *非线程安全
      *在添加和删除元素元素时具有比ArrayList更好的性能
      *LinkedList还实现了Queue接口(非直接实现,是通过实现Queue的子接口Deque间接实现Queue),该接口比List提供了更多方法。包括从尾部添加元素:offer(E)、返回第一个元素但不出队:peek()、返回第一个元素并出队:poll()等。
      *允许null元素

    由于LinkedList不同步,可以通过如下方式转化为同步的List

     List list= Collections.synchronizedList(new LinkedList());
    

    3、Vector
    Vector类定义:

    public class Vector<E> extends AbstractList<E>  
          implements List<E>, RandomAccess, Cloneable, Serializable
    

    Vector类有如下特性:
      *Vector和ArrayList类似,但属于强同步类。
      *比ArrayList多了线程安全。
      *默认每次动态增加空间是当前大小的2倍;如果在构造函数Vector(int initialCapacity, int capacityIncrement)中指定了capacityIncrement,每次动态增加的大小为capacityIncrement
      *初始容量是10
      *允许null元素

    4 对比表

    长度可变 线程安全 扩容倍数
    ArrayList 0.5(初始10)
    Vector -
    ArrayList 2(初始10)

    -

    相关文章

      网友评论

      本文标题:Java:ArrayList、LinkedList、Vector

      本文链接:https://www.haomeiwen.com/subject/mkeupttx.html