`

Vector与ArrayList对比

 
阅读更多

虽然在使用的时候好象这两个类没什么区别, 它们都是从List继承下来的, 拥有相同的方法, 但它们的内部还是有些不同的,

a) 首先Vector在内部的一些方法作了线程同步(synchronized) 同步的代价就是降低了执行效率, 但提高了安全性。而ArrayList则是线程不同步的, 可以多线程并发读写它。如果不考虑到线程的安全因素,一般用arraylist效率比较高

 

b)内部数据增长率。 所有的这些矢量集合在内部都是用Object的数组进行存储和操作的。 所以也就明白了为什么它可以接受任何类型的Object 但取出来的时候需要进行类型再造。 VectorArrayList具有自动伸缩的功能, 我们不用管它size多大, 我们都可以在它的后面追加元素。 VectorArrayList内部的数组增长率是不一样的, 当内部的数组不能容纳更多元素的时候,Vector增长原来的一倍,ArrayList增加原来的0.5倍

如过在集合中使用数据量比较大的数据,用vector有一定的优势

 

List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:

  1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
  2. Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
  3. LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics