与大多数程序设计语言一样,Java中的数组只能保存固定数目的元素,且必须把所有需要的内存单元一次性申请出来,而不能先创建数组再追加数组元素数量,为了解决这个问题,Java引入了向量类(Vector)
向量是Java.util类包提供的一个非常重要的工具类,它对应于类似数组的顺序存储的数据结构,但是具有比数组更强大的功能,它允许不同类型的元素共存于一个变长数组中,因此可以看作是把不同类型的数据按照动态数组进行处理。每个Vector类的对象可以表达一个完整的数据序列。它不但可以保存顺序的一列数据,而且还提供了许多有用的方法来操作和处理这些数据。
向量也是一组对象的集合,但相对于数组,向量可以追加对象元素数量,因此可以更方便地修改和维护序列中的对象。
Vector类的对象可以看作是一个可变大小的数组,和使用数组下标来访问数组元素类似,可以用一个整数类型的次序来访问Vector的元素,创建了Vector的对象后,如果增加了或删除了其中的元素,Vector的大小也相应地变大或者变小。
在程序设计中,经常遇到需要用一个集合作为容器来包含众多元素,而各个元素的类型及集合中元素的个数又无法预知的情况,各个元素类型又不相同的情况下,可以使用Vector类。 除了存放数据元素的elementData域外,每个向量Vector对象还包括一个容量值elementCount和一个容量增值capacityIncrement,容量值记录Vector类中元素的实际个数,这个数不多于Vector对象的容量。当有元素被加入向量时,容量值会相应的增大,以记录目前向量的大小。当向量中增加过多的元素超过了它的容量值后,向量的存储空间以容量增值的大小为单位增长,为以后新元素的加入做好准备。一般地,向量的容量值至少和向量的实际大小一样大,而且通常还要大一些。
1.Vector类的构造方法
Vector类有三个构造方法:
public Vector() 构造一个空向量
public Vector(int initialCapacity) 以指定的初始存储容量构造一个空的向量Vector
public Vector(int initialCapacity int capacityOncrement) 以指定的初始存储容量和容量增量构造一个空的向量Vector
例如: Vector MyVectot = new Vector(100,50);这个语句创建的MyVector向量序列初始有100个元素的空间,以后一旦空间用尽则以50为单位递增,使序列中元素的个数变化成150,200......在创建Vector序列时,不需要指明序列中元素的类型,可以在使用时确定。
2.Vector类对象的操作
向Vector类对象中添加元素有两种方法。第一种是addElement(Object obj):将新元素添加到序列尾部,第二种是insertElementAt(Object obj,int index):将指定对象obj插入到指定位置index处,并将原先索引值等于或大于该指定值的元素索引值加1,也就是原处于插入位置以及以后的元素都往后移动一个位置。
例如: Vector MyVector = new Vector();
for(int i=1;i<=10;i++){
MyVector.addElement(i);
}
MyVector.insertElementAt("middle",5);
使用以下方法可以修改或删除Vector类对象序列中的元素:
setElementAt(Object obj,int index)该方法将向量序列index位置处的对象元素设置为obj,如果这个位置原来有元素,则被新值覆盖,如果索引值index是负数或超出实际元素的个数,则抛出异常ArrayIndexOutOfBoundsException.
removeElement(Object obj)该方法将删除向量序列中第一个与obj对象相同的元素,同时将后面的元素向前提,补上空位,这个方法返回的是一个布尔值,表示删除操作成功与否。
removeElementAt(int index)该方法删除index指定位置处的元素,同时将后面的元素向前提,如果索引值index是负数或超出实际元素的个数,则抛出异常ArrayIndexOutOfBoundsException.
removeAllElements()该方法删除向量序列中的所有元素,同时向量的大小置为0.
Java还提供了在向量序列中进行的查找的操作,例如:
Object elementAt(int index)该方法返回指定位置处的元素,如果索引值index是负数或超出实际元素的个数,则抛出异常,这个方法返回值是Object类型的对象,在使用之前通常需要进行强制类型转换,将返回的对象引用转换成Object类的某个具体子类的对象。例如:
String str = (String)MyVector.elementAt(0);
boolean contains(Object obj)该方法检查向量序列中是否包含指定的对象元素obj。
int indexOf(Object obj, int start_index)该方法从指定的start_index位置开始向后搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置,若指定对象不存在,返回-1.
int lastIndexOf(Object obj,int start_index)该方法从指定的位置开始向前搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置,若指定的对象不存在,则返回-1.
下面是Vector类中的一些常用方法:
public final int size()返回向量中的元素数量(它不是指向量的容量,而是目前实际的元素个数)
public final boolean contains(Object elem)如果对象elem是向量中的一个元素值,则返回true,否则返回false。剩下的一些方法可以在使用的时候具体查询