ArrayList,Vector区别

最近开始面试,发现基本笔试题里面基本都有关于Collection的问题,故写此文章,总结一下。

常见笔试题型:

1.问Collection下的接口实现类有哪些:

从上图中可以看出,Collection接口有两个子类,一个List,一个Set。而List也是经常考的题目,List的接口有3个实现类,一个是ArrayList,一个是LinedList,还有一个是Vector。

2.ArrayList、LikedList、Vector的区别:

首先这三个类都是实现了List接口,因此都是线性的。LinkedList底层的数据结构是链表,是链式存储的。学过数据结构的人都知道,链式存储结构方便对数据的增加和删除,但是数据的查询不方便,因此,LinkedList多用于增加删除操作比较频繁的应用中。

ArrayList和Vector的底层数据结构都是数组,属于顺序存储结构。共同的优点是方便数据的查询和修改。但是他们这间也有比较明显的区别,区别主要体现在三点:

(1)Vector是多线程安全的,而ArrayList不是。从下面的代码可以看出。

 这是ArraList的add方法。

  1. //这个方法是没有synchronized修饰的,所以不是线程安全的。
  2. public boolean add(E e) {  
  3.     ensureCapacityInternal(size + 1);  // Increments modCount!!  
  4.     elementData[size++] = e;  
  5.     return true;  
  6. }  

 这是Vector的add方法。

  1. //这个方法有synchronized修饰的,所以是线程安全的
  2.  public synchronized boolean add(E e) {  
  3.      modCount++;  
  4.      ensureCapacityHelper(elementCount + 1);  
  5.      elementData[elementCount++] = e;  
  6.      return true;  
  7.  }  

(2)两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的,Vector默认增加原来空间的一倍,ArrayList默认增加原来空间的50%。

(3)Vector可以设置增长因子,而ArrayList不可以

ArrayList有三个构造方法:分别是

  1. public ArrayList(int initialCapacity)//构造一个具有指定初始容量的空列表。  
  2. public ArrayList()//构造一个初始容量为10的空列表。  
  3. public ArrayList(Collection<? extends E> c)//构造一个包含指定 collection 的元素的列表  
Vector有四个构造方法:

  1. public Vector()//使用指定的初始容量和等于零的容量增量构造一个空向量。  
  2. public Vector(int initialCapacity)//构造一个空向量,使其内部数据数组的大小,其标准容量增量为零。  
  3. public Vector(Collection<? extends E> c)//构造一个包含指定 collection 中的元素的向量  
  4. public Vector(int initialCapacity,int capacityIncrement)//使用指定的初始容量和容量增量构造一个空的向量  
通过比较可以看出,Vector比ArrayList多一个构造方法,public Vector(int initialCapacity,int capacityIncrement),这个构造方法的第二个参数就是增量因子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值