Java vector的详解及实例
Vector可实现自动增长的对象数组。
java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。
创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况。可以考虑使用向量类。
向量类提供了三种构造方法:
publicvector() publicvector(intinitialcapacity,intcapacityIncrement) publicvector(intinitialcapacity)
使用第一种方法系统会自动对向量进行管理,若使用后两种方法。则系统将根据参数,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
例子:VectorApp.Java
importjava.util.Vector; importjava.lang.*; importjava.util.Enumeration; publicclassVectorApp { publicstaticvoidmain(Stringargs[]) { Vectorv1=newVector(); Integerinteger1=newInteger(1); //加入为字符串对象 v1.addElement("one"); //加入的为integer的对象 v1.addElement(integer1); v1.addElement(integer1); v1.addElement("two"); v1.addElement(newInteger(2)); v1.addElement(integer1); v1.addElement(integer1); //转为字符串并打印 System.out.println("TheVectorv1is:\n\t"+v1); //向指定位置插入新对象 v1.insertElement("three",2); v1.insertElement(newFloat(3.9),3); System.out.println("TheVectorv1(usedmethod insertElementAt()is:\n\t)"+v1); //将指定位置的对象设置为新的对象 //指定位置后的对象依次往后顺延 v1.setElementAt("four",2); System.out.println("Thevectorv1cusedmethodsetElmentAt()is:\n\t"+v1); v1.removeElement(integer1); //从向量对象v1中删除对象integer1 //由于存在多个integer1,所以从头开始。 //找删除找到的第一个integer1. Enumerationenum=v1.elements(); System.out.println("Thevectorv1(usedmethodremoveElememt()is"); while(enum.hasMoreElements()) System.out.println(enum.nextElement()+""); System.out.println(); //使用枚举类(Enumeration)的方法取得向量对象的每个元素。 System.out.println("ThepositionofObject1(top-to-botton):"+v1.indexOf(integer1)); System.out.println("ThepositionofObject1(tottom-to-top):"+v1.lastIndexOf(integer1)); //按不同的方向查找对象integer1所处的位置 v1.setSize(4); System.out.println("ThenewVector(resizedthevector)is:"+v1); //重新设置v1的大小,多余的元素被抛弃 } }
运行结果:
E:\java01>javaVectorApp Thevectorv1is:[one,1,1,two,2,1,1] Thevectorv1(usedmethodinsetElementAt())is: [one,1,three,3.9,1,two,2,1,1] Thevectorv1(usedmethodsetElementAt())is: [one,1,four,3.9,1,two,2,1,1] Thevectorv1(useedmethodremoveElement())is: onefour3.91two211 Thepositionofobject1(top-to-botton):3 Thepositionofobject1(botton-to-top):7 ThenewVector(resizedthevector)is: [one,four,3.9,1]
(1)类vector定义了方法
publicfinalintsize();
此方法用于获取向量元素的个数。它们返回值是向量中实际存在的元素个数,而非向量容量。可以调用方法capacity()来获取容量值。
方法:
publicfinalsynchronizedvoidsetsize(intnewsize);
此方法用来定义向量的大小,若向量对象现有成员个数已经超过了newsize的值,则超过部分的多余元素会丢失。
(2)程序中定义Enumeration类的一个对象Enumeration是java.util中的一个接口类,
在Enumeration中封装了有关枚举数据集合的方法。
在Enumeration提供了方法hasMoreElement()来判断集合中是否还有其他元素和方法nextElement()来判断集合中是否还有其他
元素和方法nextElement()来获取下一个元素。利用这两个方法,可以依次获得集合中的元素。
Vector中提供方法:
publicfinalsynchronizedEnumerationelements();
此方法将向量对象对应到一个枚举类型。java.util包中的其他类中也都有这类方法,以便于用户获取对应的枚举类型。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!