Java编程中的vector类用法学习笔记
java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。
创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况。可以考虑使用向量类。
Vector类实现了一个动态数组。和ArrayList和相似,但是两者是不同的:
- Vector是同步访问的。
- Vector包含了许多传统的方法,这些方法不属于集合框架。
- Vector主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。
Vector类支持4种构造方法。
1.第一种构造方法创建一个默认的向量,默认大小为10:
Vector()
2.第二种构造方法创建指定大小的向量。
Vector(intsize)
3.第三种构造方法创建指定大小的向量,并且增量用incr指定.增量表示向量每次增加的元素数目。
Vector(intsize,intincr)
4.第四中构造方法创建一个包含集合c元素的向量:
Vector(Collectionc)
使用第一种方法系统会自动对向量进行管理,若使用后两种方法。则系统将根据参数,initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时。系统会扩充向量对象存储容量。
参数capacityincrement给定了每次扩充的扩充值。当capacityincrement为0的时候,则没次扩充一倍,利用这个功能可以优化存储。在Vector类中提供了各种方法方便用户的使用:
插入功能:
(1)publicfinalsynchronizedvoidadddElement(Objectobj)
将obj插入向量的尾部。obj可以是任何类型的对象。对同一个向量对象,亦可以在其中插入不同类的对象。但插入的应是对象而不是数值,所以插入数值时要注意将数组转换成相应的对象。
例如:要插入整数1时,不要直接调用v1.addElement(1),正确的方法为:
Vectorv1=newVector(); Integerinteger1=newInteger(1); v1.addElement(integer1);
(2)publicfinalsynchronizedvoidsetElementAt(Objectobj,intindex)
将index处的对象设置成obj,原来的对象将被覆盖。
(3)publicfinalsynchronizedvoidinsertElement(Objectobj,intindex)
在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。
删除功能:
(1)publicfinalsynchronizedvoidremoveElement(Objectobj)
从向量中删除obj,若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。
(2)publicfinalsynchronizedvoidremoveAllElement();
删除向量所有的对象
(3)publicfianlsynchronizedvoidremoveElementAt(intindex)
删除index所指的地方的对象
查询搜索功能:
(1)publicfinalintindexOf(Objectobj)
从向量头开始搜索obj,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1.
(2)publicfinalsynchronizedintindexOf(Objectobj,intindex)
从index所表示的下标处开始搜索obj.
(3)publicfinalintlastindexOf(Objectobj)
从向量尾部开始逆向搜索obj.
(4)publicfinalsynchornizedintlastIndex(Objectobj,intindex)
从index所表示的下标处由尾至头逆向搜索obj.
(5)publicfinalsynchornizedfirstElement()
获取向量对象中的首个obj
(6)publicfinalsynchornizedObjectlastElement()
获取向量对象的最后一个obj
实例
下面的程序说明这个集合所支持的几种方法:
importjava.util.*; publicclassVectorDemo{ publicstaticvoidmain(Stringargs[]){ //initialsizeis3,incrementis2 Vectorv=newVector(3,2); System.out.println("Initialsize:"+v.size()); System.out.println("Initialcapacity:"+ v.capacity()); v.addElement(newInteger(1)); v.addElement(newInteger(2)); v.addElement(newInteger(3)); v.addElement(newInteger(4)); System.out.println("Capacityafterfouradditions:"+ v.capacity()); v.addElement(newDouble(5.45)); System.out.println("Currentcapacity:"+ v.capacity()); v.addElement(newDouble(6.08)); v.addElement(newInteger(7)); System.out.println("Currentcapacity:"+ v.capacity()); v.addElement(newFloat(9.4)); v.addElement(newInteger(10)); System.out.println("Currentcapacity:"+ v.capacity()); v.addElement(newInteger(11)); v.addElement(newInteger(12)); System.out.println("Firstelement:"+ (Integer)v.firstElement()); System.out.println("Lastelement:"+ (Integer)v.lastElement()); if(v.contains(newInteger(3))) System.out.println("Vectorcontains3."); //enumeratetheelementsinthevector. EnumerationvEnum=v.elements(); System.out.println("\nElementsinvector:"); while(vEnum.hasMoreElements()) System.out.print(vEnum.nextElement()+""); System.out.println(); } }
以上实例编译运行结果如下:
Initialsize:0 Initialcapacity:3 Capacityafterfouradditions:5 Currentcapacity:5 Currentcapacity:7 Currentcapacity:9 Firstelement:1 Lastelement:12 Vectorcontains3. Elementsinvector: 12345.456.0879.4101112