Vector和ArrayList异同 ?

本文探讨了Vector和ArrayList的区别,主要集中在它们的线程安全性和性能上。Vector是线程安全的,适合多线程环境,但其方法加锁导致效率较低;ArrayList则适用于单线程,效率更高。两者都是基于数组实现,ArrayList提供了更多的构造方法。在容量扩展方面,Vector可以设置增长因子,而ArrayList会按固定比例(通常是50%)扩容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、Vector

Vector也是一个类似于ArrayList的可变长度的数组类型,它的内部也是使用数组来存放数据对象的。值得注意的是Vector与ArrayList唯一的区别是,Vector是线程安全的,即它的大部分方法都包含有关键字synchronized,因此,若对于单一线程的应用来说,最好使用ArrayList代替Vector,因为这样效率会快很多(类似的情况有StringBuffer与StringBuilder);而在多线程程序中,为了保证数据的同步和一致性,可以使用Vector代替ArrayList实现同样的功能。

Vector类 是在 java 中可以实现自动增长的对象数组,vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。

vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。  
简单的使用方法如下:
1
2
3
vector<int>test; //建立一个vector
test.push_back( 1 );
test.push_back( 2 ); //把1和2压入vector这样test[0]就是1,test[1]就是2
我们可以用一个 迭代器
vector<int>::iterator iter=test.begin();//定义一个可以迭代int型vector的迭代器iter,它指向test的首位
for(;iter!=test.end();iter++) cout<<(*iter);//iter++指的是向后迭代一位,直到iter到超出末端迭代器为止,输出迭代器指向的值
我们也可以使用at访问:
1
2
3
4
vector<int>test; //建立一个vector
test.push_back( 1 );
test.push_back( 2 ); //把1和2压入vector这样test[0]就是1,test[1]就是2
int i =test. at ( 1 ); //i为2
JAVA
Java.util.Vector提供了向量(Vector)类以实现类似动态 数组的功能。在 Java语言中是没有 指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“ 动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,向量类中提供的大量方法也大大方便了用户的使用。
在相对于ArrayList来说,Vector线程是安全的,也就是说是同步的
创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。对于预先不知或不愿预先定义 数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。向量类提供了三种 构造方法
1
2
3
public  Vector()
public  Vector( int  initialcapacity, int  capacityIncrement)
public  Vector( int  initialcapacity)
使用第一种方法,系统会自动对向量对象进行管理。若使用后两种方法,则系统将根据参数initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时,系统会扩充向量对象的存储容量。
参数capacityIncrement给定了每次扩充的扩充值。当capacityIncrement为0时,则每次扩充一倍。利用这个功能可以优化存储。在Vector类中提供了各种方法方便用户使用:

Vector优点


Java中,数组对象一旦创建后,其元素的个数 不能被修改。而Java.util包中的Vector类(向量)提供类似于数组的能力,且能够动态地调整自身的大小。Vector类似于一个数组,但与数组相比在使用上有两个优点:
① 使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加;
② Vector类提供额外的方法来增加、删除元素,比数组操作高效。  

插入功能

(1)public final synchronized void addElement(Object obj)
将obj插入向量的尾部。obj可以是任何类的对象。对同一个向量对象,可在其中插入不同类的对象。但插入的应是对象而不是数值,所以插入数值时要注意将数值转换成相应的对象。
例 要插入一个整数1时,不要直接调用v1.addElement(1),正确的方法为:
1
2
3
Vectorv1= new  Vector();
Integerinteger1= new  Integer( 1 );
v1.addElement(integer1);
(2)public final synchronized void setElementAt(object obj,int index)
将index处的对象设成obj,原来的对象将被覆盖。
(3)public final synchronized void insertElementAt(Object obj,int index)
在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。

删除功能

(1)public final synchronized void removeElement(Object obj)
从向量中删除obj。若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。
(2)public final synchronized void removeAllElement()
删除向量中所有的对象。
(3)public final synchronized void removeElementlAt(int index)
删除index所指的地方的对象。

查询搜索功能

(1)public final int indexOf(Object obj)
从向量头开始搜索obj,返回所遇到的第一个obj对应的 下标,若不存在此obj,返回-1。
(2)public final synchroniz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值