Vector在JAVA中的详细说明

来源:互联网 发布:空巢青年 知乎 编辑:程序博客网 时间:2024/06/08 11:20

JAVA中的详细说明

  java:Vector类可以实现自动增长的对象数组;

  Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在CC++中所谓动态数组一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,但向量类中提供的大量方法大大方便了用户的使用。

  创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。向量类提供了三种构造方法:

  public vector()

  public vector(int initialcapacity,int capacityIncrement)

  public vector(int initialcapacity)

  使用第一种方法,系统会自动对向量对象进行管理。若使用后两种方法,则系统将根据参数initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时,系统会扩充向量对象的存储容量。

  参数capacityIncrement给定了每次扩充的扩充值。当capacityIncrement0时,则每次扩充一倍。利用这个功能可以优化存储。在Vector类中提供了各种方法方便用户使用:

  插入功能

  (1)public final synchronized void addElement(Object obj)

  将obj插入向量的尾部。obj可以是任何类的对象。对同一个向量对象,可在其中插入不同类的对象。但插入的应是对象而不是数值,所以插入数值时要注意将数值转换成相应的对象。

  例要插入一个整数1时,不要直接调用v1.addElement(1),正确的方法为:

  Vector v1=new Vector();

  Integer integer1=new Integer(1);

  v1.addElement(integer1);

  (2)public final synchronized void setElementAt(object obj,int index)

  将index处的对象设成obj,原来的对象将被覆盖。

  (3)public final synchronized void insertElementAt(Object obj,int index)

  在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。

  删除功能

  (1)public final synchronized void removeElement(Object obj)

  从向量中删除obj。若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。

  (2)public final synchronized void removeAllElement()

  删除向量中所有的对象。

  (3)public final synchronized void removeElementlAt(int index)

  删除index所指的地方的对象。

  查询搜索功能

  (1)public final int indexOf(Object obj)

  从向量头开始搜索obj ,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1

  (2)public final synchronized int indexOf(Object obj,int index)

  从index所表示的下标处开始搜索obj

  (3)public final int lastIndexOf(Object obj)

  从向量尾部开始逆向搜索obj

  (4)public final synchronized int lastIndexOf(Object obj,int index)

  从index所表示的下标处由尾至头逆向搜索obj

  (5)public final synchronized Object firstElement()

  获取向量对象中的首个obj

  (6)public final synchronized Object lastelement()

  获取向量对象中的最后一个obj

  了解了向量的最基本的方法后,我们来看一下例子VectorApp.java

  例 VectorApp.java

  import java.util.Vector;

  import java.lang.*;

  //这一句不应该要,但原文如此

  import java.util.Enumeration;

  public class VectorApp

  {

  public static void main(String[] args)

  {

  Vector v1=new Vector();

  Integer integer1=new Integer(1);

  v1.addElement("one");

  //加入的为字符串对象

  v1.addElement(integer1);

  v1.addElement(integer1);

  //加入的为Integer的对象

  v1.addElement("two");

  v1.addElement(new Integer(2));

  v1.addElement(integer1);

  v1.addElement(integer1);

  System.out.println("The vector v1 is:\n\t"+v1);

  //v1转换成字符串并打印

  v1.insertElementAt("three",2);

  v1.insertElementAt(new Float(3.9),3);

  System.out.println("The vector v1(used method insertElementAt())is:\n\t "+v1);

  //往指定位置插入新的对象,

  指定位置后的对象依次往后顺延

  v1.setElementAt("four",2);

  System.out.println("The vector v1(used method setElementAt())is:\n\t "+v1);

  //将指定位置的对象设置为新的对象

  v1.removeElement(integer1);

  //从向量对象v1中删除对象integer1由于

  存在多个integer1所以从头开始

  //找,删除找到的第一个integer1

  Enumeration enum=v1.elements();

  System.out.print("The vector v1(used method removeElement())is:");

  while(enum.hasMoreElements())

  System.out.print(enum.nextElement()+" ");

  System.out.println();

  //使用枚举类(Enumeration)

  的方法来获取向量对象的每个元素

  System.out.println("The position of object 1(top-to-bottom):"

  + v1.indexOf(integer1));

  System.out.println("The position of object 1(tottom-to-top):"

  +v1.lastIndexOf(integer1));

  //按不同的方向查找对象integer1所处的位置

  v1.setSize(4);

  System.out.println("The new vector(resized the vector)is:"+v1);

  //重新设置v1的大小,多余的元素被行弃

  }

  }

  运行结果:

  E:\java01>java VectorApp

  The vector v1 is:

  [one, 1, 1, two, 2, 1, 1]

  The vector v1(used method insertElementAt())is:

  [one, 1, three, 3.9, 1, two, 2, 1, 1]

  The vector v1(used method setElementAt()) is:

  [one, 1, four, 3.9, 1, two, 2, 1, 1]

  The vector v1(used method removeElement())is:

  one four 3.9 1 two 2 1 1

  The position of object 1(top-to-bottom):3

 

在JAVA中,Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector的大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作

下面是Vector的相关范例.

import java.util.*;

public class test {

    public static void main(String[] args) {

       //Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

       Vector v = new Vector(4);

       v.add("China");

       v.add("England");

       v.add("Franch");

       v.add("Germany");

//     遍历Vector中的元素

       for(int i = 0;i < v.size();i++){

          System.out.println(v.get(i));

       }
    }
}  

 

Vector在Java编程中的应用
2008-02-23 19:35
vector 抽象容器类型之一(还有list和deque等),与其他几中容器类型不同的是它高效支持随机访问其中的元素。
使用vector,首先必须调用头文件(#include <vector>)
它的声明和初始化是这样的
vector <类型名> 变量名
vector <int> vi = ( 10 , 1 ) //初始化为10个元素的vector,每个元素都为1
使用迭代器标识:
vector <int> test;
text.begin()   text.end()。例如:
for (vector< type > ::iterator it = text.begin(); it != text.end(); ++it)
       cout << *it << ' ';
push_back()的用法是将元素插入vector容器的最尾部
举个例子
vector <int> vi;
int a[4] = { 0, 1, 2, 3};
for ( int i = 0; i<4; ++i )
vi.push_back(a[i]);
此时vi就是0 1 2 3
如果改成
vi.push_front( a[i] );
vi就是 3 2 1 0
参考资料:C++ Primer
。。。。。。。。。。。。

Vector是java.util包的类,他的功能是实现了一个动态增长的数组,像其他数组一样,此向量数组可以为每个包含的元素分配一下整数索引号,但是,向量不同于数组,它的长度可以在创建以后根据实际包含的元素个数增加或减少。
  向量对象是通过capacity(容量)和capacityIncrement(增长幅度)两个因素来实现存储优化管理。容量因素的值总是大于向量的长度,因为当元素被添加到向量中,向量存储长度的增加是以增长幅度因素指定的值来增加的,应用程序可以在插入大量元素前,先根据需要增加适量的向量容量,这样,可以避免增加多余的存储空间。
  以上是参考手册里对Vector的介绍,下面是我学习中的一些心得:
  Vector有三个构造函数
  public Vector(int initialCapacity,int capacityIncrement)
    public Vector(int initialCapacity)  
    public Vector()
     这三个构造函数的差别仅仅在于对向量的初始容量和增长幅度的定义上,向量的增长过程是当当前容易不能满足添加的元素时,就按照构造时给定的增长幅度来增加,如果未定义增长幅度,则每次增加的时候会成倍增加。举个例。
  Vector t=new Vetor(4,0);
    for(int i=0;i<20;i++)
    t.addElement(new String("ft"));
    那么实际运行后,t的容量是4*2*2*2=32,
如果改写成
     Vector t=new Vetor(4,3);
     for(int i=0;i<20;i++)
     t.addElement(new String("ft"));
    那么实际运行后,t的容量是4+3+3+3+3+3+3=22,
  但如果写成
     Vector t=new Vetor();
     for(int i=0;i<20;i++)
     t.addElement(new String("ft"));
     则运行后t的容量是20,我测试过,好像用默认的构造函数,初始容量是10,以后每次翻倍,这样容易造成空间的浪费,因为建议不采用这种构造函数。
  Vector类有很多方法,其实像常用的有addElement(),removeElementAt(int index),insertElementAt(Object obj,int index)等方法,这些方法从字面上就很容易理解,其实与数组的操作差不多。
  Vector类的要点就在于对存储空间的操作,因为主要是讲一下下面的几个方法:
  public void trimToSize()
  该方法用于删除掉向量中大于向量当前长度的多余容量,应用程序通过使用此方法可以使向量容量刚好满足元素存储的最小需要。
  public void ensureCapacity(int minCapacity)
     该方法用于增加向量的容量,保证增加后的向量容量不小于给定的参数。对这个方法我作过测试,使用这个方法后向量容量增加的幅度与构造Vector类时的构造方法有关,如果构造函数时给定的向量增加幅度为0,那么使用这个方法后容量会成倍增长,如果构造函数时给定了不为0的向量增加幅度,那么使用这个方法后容量会以给定的幅度为单位增长。
  public void setSize(int newSize)
    该方法用于设置向量的长度,如果新设置的长度大于向量的当前长度,新增的内容为空的元素被添加到当前向量的尾部。如果新设置的长度小于向量当前的长度,索引值大于新设置长度的元素将被截取。
  Vector实际上就是一种特殊的数组,由于他的通用性,他的元素都是Object类,所以对Vector的元素增加或者读取都要进行类型转换。如:
  Vector t=new Vector();
     t.addElement(new String("vector"));
     system.out.println((String)t.elementAt(0));
    t.addElement((Image)(pic));
    g.drawImage((Image)(t.elementAt(1)),0,0,0);


java.util.vector中的vector的详细用法
ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些
import java.util.*;
/**
* 演示Vector的使用。包括Vector的创建、向Vector中添加元素、从Vector中删除元素、
* 统计Vector中元素的个数和遍历Vector中的元素。
*/

public class VectorDemo{
public static void main(String[] args){

//Vector的创建
//使用Vector的构造方法进行创建
Vector v = new Vector(4);

//向Vector中添加元素
//使用add方法直接添加元素
v.add("Test0");
v.add("Test1");
v.add("Test0");
v.add("Test2");
v.add("Test2");

//从Vector中删除元素
v.remove("Test0"); //删除指定内容的元素
v.remove(0);       //按照索引号删除元素

//获得Vector中已有元素的个数
int size = v.size();
System.out.println("size:" + size);

//遍历Vector中的元素
for(int i = 0;i < v.size();i++){
   System.out.println(v.get(i));
}
}
}

-------------
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。
  例如:
 
import java.lang.System;
import java.util.Vector;
import java.util.Emumeration;
public class Avector{
   public static void main(String args[]){
0. Vector v=new Vector();
1. v.addElement("one");
2. v.addElement("two");
3. v.addElement("three");
4. v.insertElementAt("zero",0);
5. v.insertElementAt("oop",3);
6. v.setElementAt("three",3);
7. v.setElementAt("four",4);
8. v.removeAllElements();
}
}
Vector中的变化情况:
1. one   2. one   3. one   4. zero   5.zero   6. zero  7. zero     8.
         two         two            one       one          one      one
           three       two       two           two   two
                three      oop           three  three
                     three          three  four
 
另外,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)
{
显示政治信息
}
}
}
}

 

  The position of object 1(tottom-to-top):7

  The new vector(resized the vector)is:

  [one, four, 3.9, 1]

  E:\java01>

  从例1中运行的结果中可以清楚地了解上面各种方法的作用,另外还有几点需解释。

  (1)Vector定义了方法

  public final int size()

  此方法用于获取向量元素的个数。它的返回值是向是中实际存在的元素个数,而非向量容量。可以调用方法capactly()来获取容量值。

  方法:

  public final synchronized void setsize(int newsize)

  此方法用来定义向量大小。若向量对象现有成员个数已超过了newsize的值,则超过部分的多余元素会丢失。

  (2)程序中定义了Enumeration类的一个对象

  Enumerationjava.util中的一个接口类,在Enumeration中封装了有关枚举数据集合的方法。

  在Enumeration中提供了方法hawMoreElement()来判断集合中是束还有其它元素和方法nextElement()来获取下一个元素。利用这两个方法可以依次获得集合中元素。

  Vector中提供方法:

  public final synchronized Enumeration elements()

  此方法将向量对象对应到一个枚举类型。java.util包中的其它类中也大都有这类方法,以便于用户获取对应的枚举类型。

原创粉丝点击