JAVA 向量介绍
向量(Vector)是java.util类包提供的一个工具类。它对应于类似数组的顺序存储的数据结构,但是具有比数组更强大的功能。它是允许不同类型元素共存的变长数组。每个Vector类的对象可以表达一个完整的数据序列。
Vector类的对象不但可以保存顺序的一列数据,而且还提供了许多有用的方法来操作和处理这些数据。
另外,Vector类对象所表达的序列中元素的个数是可变的,即Vector实现了变长数组。
Java中的数组只能保存固定数目的元素,且必须把所有需要的内存单元一次性的申请出来,而不能先创建数组再追加数组元素数量,为了解决这个问题Java中引入了向量类Vector。Vector也是一组对象的集合,但相对于数组,Vector可以追加对象元素数量,可以方便的修改和维护序列中的对象。
向量比较适合在如下情况下使用:
1. 需要处理的对象数目不定,序列中的元素都是对象或可以表示为对象
2. 需要将不同类的对象组合成一个数据序列
3. 需要做频繁的对象序列中元素的插入和删除
4. 经常需要定位序列中的对象和其他查操作
5. 在不同的类之间传递大量的数据
Vector类的方法相对于数组要多一些,但是使用这个类也有一定的局限性,例如其中的对象不能是简单数据类型等。
(1) 创建向量类的对象
Vector类有三个构造方法:
● Vector():构造一个空的向量。
● Vector(int capacity):以指定的存储容量构造一个空的向量。
● Vector(int capacity, int capacityIncrement):以指定的存储容量和容量增量构造一个空
的Vector。
例如: Vector MyVector = new Vector(100,50);
这个语句创建的MyVector向量序列初始有100个元素的空间,以后一旦使用殆尽则以50为单位递增,使序列中元素的个数变化成150,200,…。在创建Vector序列时,不需要指明序列中元素的类型,可以在使用时确定。
(2) 向向量序列中添加元素:
有两种添加元素的方法:
addElement( Object obj)
将新元素添加到序列尾部。
insertElementAt(Object obj, int index)
将新元素插入到指定位置。
下面是使用这两种方法的例子:
Vector MyVector=new Vector();
for (int i=1;i<=10;i++)
{
MyVector.addElement(new Integer(i));
}
MyVector.insertElementAt("middle",5);
例题
import java.util.*;
class aa{
public static void main(String [] arg)
{Vector MyVector=new Vector();
for (int i=1;i<=10;i++)
MyVector.addElement(new Integer(i));
MyVector.insertElementAt("middle",5);
for (int i=0;i<=10;i++)
System.out.println(MyVector.elementAt(i));
}//main
}//class
运行结果:
1
2
3
4
5
middle
6
7
8
9
10
(3) 修改或删除向量序列中的元素
使用以下方法修改或删除向量序列中的元素:
1. setElementAt(Object obj,int index)
将向量序列index位置处的对象元素设置成为obj,如果这个位置原来有元素,则被覆盖。
2. removeElement(Object obj)
删除向量序列中第一个与指定的obj对象相同的元素,同时将后面的元素前提,补上空位。这个方法返回的是布尔值。
3. removeElementAt(int index)
删除index指定位置处的元素,同时将后面的元素前提。
4. removeAllElements()
清除向量序列中的所有元素。
下例中先创建一个Vector,再删除掉其中的所有字符串对象“to”。
Vector MyVector=new Vector(100);
for (int i=0;i<10;i++)
{
MyVector.addElement(“welcome”);
MyVector.addElement(“to”);
MyVector.addElement(“beijing”);
}
while (veElement(“to”));
(4)查向量序列中的元素
常用于查向量序列中某元素的方法如下:
1.Object elementAt(int index)
返回指定位置处的元素。
一个要注意的问题:由于返回的是Object类型的对象,在使用之前通常需要进行强制类型转换,将返回的对象引用转换成Object类的某个具体子类的对象。例如:
String str=(String)MyVector.elementAt(0);
2. boolean contains(Object obj)
检查向量序列中是否包含指定的对象元素obj。
3. int indexOf (Object obj,int start_index)
从指定的start_index位置开始向后搜索,返回所到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回-1。
4. int lastIndexOf(Object obj,int start_index)
从指定的start_index位置开始向前搜索,返回所到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回-1。例如:
int i=0;
While((i=MyVector.indexOf(“welcome”,i))!=-1)
{
System.out.println(i); i++;
}
(5)Vector中的其他方法
capacity():返回Vector的容量
clone():建立Vector的备份
copyInto(Object[]):把Vector中的元素拷贝到一个数组中
firstElement():返回第一个元素
lastElement():返回最后一个元素
isEmpty():判断是否为空
setSize(int size):设置Vector的大小
size():返回Vector中元素的数量
trimToSize():将Vector的容量下调至最小值
使用Vector时,一个需要特别注意的问题就是要先创建后使用。如果不先使用new运算符利用构造函数创建Vector类的对象,而直接使用Vector的方法,如:addElement()等方法,则可能造成堆栈溢出或使用null指针等异常,妨碍程序的正常运行。
例题:用向量实现,创建3个学生对象(学号、姓名、年龄)和4个教师对象(教工号、姓名、系别),并且输出。
import java.util.*;
class Stu{
String xh; String xm; int nl;
public Stu(String xh1,String xm1,int nl1){
xh=xh1;xm=xm1;nl=nl1;
}
void disp(){
System.out.println("学生:"+xh+" "+xm+" "+nl);
}
}
class Tech{
String zh;
String xm;
String xb;
public Tech(String zh1,String xm1,
String xb1){
zh=zh1;xm=xm1;xb=xb1; }
void disp(){
System.out.println("教师:"+zh+" "+xm+" "+xb);
}}
public class StuTer{
public static void main(String[] s){
Vector st=new Vector();
st.addElement(new Stu("101","李明",18));
st.addElement(new Stu("102","王大力",20));
st.addElement(new Stu("103","刘萍",19));
st.addElement(new Tech("10100","林小利","计算机"));
st.addElement(new Tech("10101","熊平","计算机"));
st.addElement(new Tech("10102","戴红兵","电力"));
st.addElement(new Tech("10103","曲小军","电力"));
for(int i=0;i<st.size();i++) {
if((st.elementAt(i)) instanceof Stu)
( (Stu)(st.elementAt(i)) ).disp();
else
( (Tech)(st.elementAt(i)) ).disp();}
}
java中index是什么意思
}
API 1.6.0 帮助说明:
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论