Vector 类提供了实现可增长数组的功能,随着更多元素加入其中,数组变的更大。在删除一些元素之后,数组变小。
Vector 有三个构造函数:
public Vector(int initialCapacity,int capacityIncrement)
public Vector(int initialCapacity)
public Vector()
Vector 运行时创建一个初始的存储容量initialCapacity,存储容量是以capacityIncrement 变量定义的增量增长。初始的存储容量和capacityIncrement 可以在Vector 的构造函数中定义。第二个构造函数只创建初始存储容量。第三个构造函数既不指定初始的存储容量也不指定capacityIncrement。
Vector 类提供的访问方法支持类似数组运算和与Vector 大小相关的运算。类似数组的运算允许向量中增加,删除和插入元素。它们也允许测试矢量的内容和检索指定的元素,与大小相关的运算允许判定字节大小和矢量中元素数目。
现针对经常用到的对向量增,删,插功能举例描述:
addElement(Object obj)
把组件加到向量尾部,同时大小加1,向量容量比以前大1
insertElementAt(Object obj, int index)
把组件加到所定索引处,此后的内容向后移动1 个单位
setElementAt(Object obj, int index)
把组件加到所定索引处,此处的内容被代替。
removeElement(Object obj) 把向量中含有本组件内容移走。
removeAllElements() 把向量中所有组件移走,向量大小为0。
[以上是我从http://blog.csdn.net/zhy21/archive/2005/05/17/376205.aspx学习摘抄来的]
---------------------------------------------
[这个是根据上面网页给出的实例,自己练习的]
import java.util.Vector;
public class Avector {
public static void main(String args[]){
/**
* Vector类可以实现可增长的对象数组。
* 与数组一样,它含有可以使用整数索引进行访问的组件
* 同时它也有自身特点:
* vector的大小可以根据需要增加或缩小,以适应
* 创建Vector后进行添加或移出项的操作。
* 对于vector的增加是通过设置其参数 capacityIncrement
*
*
* 其存储将按 capacityIncrement 的大小增加存储块
* 。应用程序可以在插入大量组件前增加向量的容量;
* 这样就减少了增加的重分配的量。
* [对于这个有点像操作系统学习当中的存储器管理的内存分配方式
* 最好计算好需要的capacityIncrement增量,以保证最少的
* 内存重分配次数]
*
*
*
* */
Vector v=new Vector();
/**
* public void addElement(E obj)
将指定的组件添加到此向量的末尾,将其大小增加 1
*/
v.addElement("one");
System.out.println("v.addElement(/"one/") =====索引是 0 ? "+v.get(0).toString());//数组都是以0开始的索引的
v.addElement("two");
System.out.println("v.addElement(/"two/") =====索引是 1 ? "+v.get(1).toString());
v.addElement("three");
System.out.println("v.addElement(/"three/") =====索引是 2 ? "+v.get(2).toString());
v.insertElementAt("zero", 0);//是将"zero"放入[0]处,并将原来的值对应的
//[]向下移动,数组的特性 { 顺序移动 }
System.out.println("此时索引[0]处的值 ? "+v.get(0).toString());
System.out.println("此时索引[1]处的值 ? "+v.get(1).toString());
System.out.println("此时索引[2]处的值 ? "+v.get(2).toString());
System.out.println("此时索引[3]处的值 ? "+v.get(3).toString());
v.insertElementAt("opp",3);
System.out.println("**************************************");
System.out.println("----此时索引[3]处的值 ? "+v.get(3).toString());
System.out.println("----此时索引[4]处的值 ? "+v.get(4).toString());
System.out.println("**************************************");
v.setElementAt("four", 4);
System.out.println("========此时索引[4]处的值 ? "+v.get(4).toString());
v.removeAllElements();
/** System.out.println("再测 "+v.get(0).toString());
* 报错 Array index out of range: 0
* 可以得出已经全部移出完毕!
*/
}
}
结果为:
v.addElement("one") =====索引是 0 ? one
v.addElement("two") =====索引是 1 ? two
v.addElement("three") =====索引是 2 ? three
此时索引[0]处的值 ? zero
此时索引[1]处的值 ? one
此时索引[2]处的值 ? two
此时索引[3]处的值 ? three
**************************************
----此时索引[3]处的值 ? opp
----此时索引[4]处的值 ? three
**************************************
========此时索引[4]处的值 ? four
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
at java.util.Vector.get(Vector.java:694)
at cn.java.Avector.main(Avector.java:56)
-----------------------------------------
另外,Vector 在参数传递中发挥着举足轻重的作用。
在Applet 中有一块画布(Canvas) 和一个(Panel), 而Panel 中放着用户要输入的信息,根据这些信息把参数传递到canvas 中,这时在Java 中用一个接口(Interface), 而在接口中需用一个Vector 去传递这些参数。另外,在一个类向另一个类参数传递就可以用这种方法。
import java.util.Vector
interface codeselect{
Vector codeselect=new Vector();
}
显示数学信息
Vector(0)存入学生编号
Vector(1)存入学科
在Panel 中当用户在TextField 和Choice 中选择自己所要求的内容,程序中通过事件响应把值传到向量Vector 中。假若在Panel 类中:
public void codepanel extends Panel{
public void init()
{
**.
TextField s=new TextField();
Choice c=new Choice();
c. addItem("语文");
c.addItem("数学");
c.addItem("政治");
add(s);
add (c);
**
}
public boolean handleEvent(Event event){
if(event.id==Event.ACTION_EVENT){
if(event.target.instanceof Textfield)
{
coderesult.setElementAt(s.getText(),0);
}
else if(event.target intanceof Choice)
{
coderesult.setElementAt(new Integer(c.getSelectedIndex()),1);
}
}
}
}
这时,向量中已经存入学生编号和学科索引号(0 为语文,1 为数学,2 为政治)。
而在Canvas 中得到此值,
public class codecanvas extends Canvas{
public void code{}
public void paint{
String str;
int t;
str=(String)coderesult.elementAt(0);
t=(new Integer(codeselect.elementAt(1).toString())).intValue();
if(t==0)
{
显示语文信息
}
else if(t==1)
{
显示数学信息
}
else if(t==2)
{
显示政治信息
}
}
}
----------------------------------------------
[这个也是学习的网页给出的实例]
这个不需要很详细的练习,因为做起来很麻烦。
个人觉得能够理解作者举出的例子的思想就可以了。
个人觉得这个实例,给我的启示是:
可以先创建好vector对象
然后可以在需要添加值得时候或者进行修改时候,对其进行操作。
实现动态的操作的作用。