[学习笔记]java SE 学习Vector的一些知识

来源:互联网 发布:淘宝店智能版怎么装修 编辑:程序博客网 时间:2024/06/09 15:55

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对象

 然后可以在需要添加值得时候或者进行修改时候,对其进行操作。

实现动态的操作的作用。

原创粉丝点击