文档章节

Java中Vector和ArrayList的区别

wenqi_arthur
 wenqi_arthur
发布于 2014/10/20 10:47
字数 725
阅读 68
收藏 2

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

  1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

  2. Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

  3. LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

     查看Java源代码,发现当数组的大小不够的时候,需要重新建立数组,然后将元素拷贝到新的数组内,ArrayList和Vector的扩展数组的大小不同。

ArrayList中:

复制代码

1 public boolean add(E e) {
2
3    ensureCapacity(size + 1);  // 增加元素,判断是否能够容纳。不能的话就要新建数组
4  
5    elementData[size++] = e;
6
7    return true;
8
9 }
10
11  public void ensureCapacity(int minCapacity) {
12
13    modCount++;
14
15    int oldCapacity = elementData.length;
16
17    if (minCapacity > oldCapacity) {
18
19        Object oldData[] = elementData; // 此行没看出来用处,不知道开发者出于什么考虑
20  
21        int newCapacity = (oldCapacity * 3)/2 + 1; // 增加新的数组的大小
22  
23        if (newCapacity < minCapacity)
24
25       newCapacity = minCapacity;
26
27            // minCapacity is usually close to size, so this is a win:
28  
29            elementData = Arrays.copyOf(elementData, newCapacity);
30
31    }
32
33 }
34
35  

复制代码

 

 

Vector中:

复制代码

1 private void ensureCapacityHelper(int minCapacity) {
2
3    int oldCapacity = elementData.length;
4
5    if (minCapacity > oldCapacity) {
6
7        Object[] oldData = elementData;
8
9        int newCapacity = (capacityIncrement > 0) ?
10
11       (oldCapacity + capacityIncrement) : (oldCapacity * 2);
12
13        if (newCapacity < minCapacity) {
14
15       newCapacity = minCapacity;
16
17        }
18
19         elementData = Arrays.copyOf(elementData, newCapacity);
20
21    }
22
23 }
24
25

复制代码

 

关于ArrayList和Vector区别如下:

  1. ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。

  2. Vector提供indexOf(obj, start)接口,ArrayList没有。

  3. Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。


本文转载自:http://www.cnblogs.com/wanlipeng/archive/2010/10/21/1857791.html

共有 人打赏支持
wenqi_arthur
粉丝 17
博文 69
码字总数 4580
作品 0
广州
私信 提问
关于Android中Intent传递Serialzilable数据的问题

之前写程序,如果是队列数据的话,一般都是用ArrayList来作为存储介质,但是现在接手公司的新项目,因为之前这个公司是在windows mobile上实现的(也就是C写的),他们可能更习惯使用Vector,...

小小_小小
2014/05/20
0
0
Vector、ArrayList、LinkedList 有什么区别?

版权声明:本文供交流学习,能够帮助到你是我最大的荣幸! https://blog.csdn.net/u014231523/article/details/82086185 这个问题主要是考察集合框架的问题,主要考察三者之间的设计区别,以...

兴国First
2018/08/26
0
0
Java每天10道面试题,跟我走,offer有!(五)

41.Iterator、ListIterator 和 Enumeration的区别? 42.Java 中 Set 与 List 有什么不同? 43.arraylist 与 vector 的区别? 44.什么类实现了List接口? 这里推荐一下我的Java后端高级技术群:...

Java干货分享
2018/11/16
0
0
关于java.util.Vector 或 java.util.Hashtable类过时的讨论

某些高级IDE在检测代码成熟问题时,会报告集合是否过时的问题。目前过时的集合类有两个java.util.Vector 和 java.util.Hashtable 。 Vector的api描述是:从jdk 1.2版本开始,该类被修正为实现...

Barudisshu
2013/09/10
0
2
Java核心(四)你不知道的数据集合

导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! Java中的集合通常指的是Collection下的三个集合框架List、Set、Q...

王磊的博客
2018/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2亿用户背后的Flutter应用框架Fish Redux

背景 在闲鱼深度使用 Flutter 开发过程中,我们遇到了业务代码耦合严重,代码可维护性糟糕,如入泥泞。对于闲鱼这样的负责业务场景,我们需要一个统一的应用框架来摆脱当下的开发困境,而这也...

阿里云官方博客
13分钟前
0
0
C++生成随机数:高斯/正态分布(gaussian/normal distribution)

高斯分布也称为正态分布(normal distribution)。 常用的成熟的生成高斯分布随机数序列的方法由Marsaglia和Bray在1964年提出,C++版本如下: #include <stdlib.h>#include <math.h> d...

天蚕宝衣
17分钟前
0
0
从 Jenkins 迁移到 Jenkins X:一场持续交付之旅

背景 在 dailymotion,我们信奉 DevOps 最佳实践,并且重度使用了 Kubernetes。我们的部分产品(并非全部)已经部署在 Kubernetes 上。在迁移我们的广告技术平台时,为了赶时髦(作者你这么直...

微笑向暖wx
21分钟前
0
0
Kafka Producer Consumer

Producer API org.apache.kafka.clients.producer.KafkaProducer 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:...

编程SHA
28分钟前
0
0
在centos上搭建git服务器并自动同步代码

在centos上搭建git服务器并自动同步代码 tortoisegit git centos linux 5k 次阅读 · 读完需要 15 分钟 0 参考文章 CentOS安装Git实现多人同步开发 centos中GIT服务器搭建及使用密钥连接 简述...

linjin200
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部