java向量及其应用

向量(Vector)是 java.util 包提供的一个工具类,该类实现了可扩展的对象数组。

向量和数组的区别

向量和数组相似,都可以保存列表对象。但是数组只能保存固定大小的列表,而向量却提供了一种类似于“动态数组”的功能, 向量与数组的重要区别之一就是向量的容量是可变的

向量和数组分别适用于不同的场合,一般来说,下列场合更适合于使用向量:
  • 如果需要频繁进行对象的插入和删除工作,或者因为需要处理的对象数目不定。
  • 列表成员全部都是对象,或者可以方便的用对象表示。
  • 需要很快确定列表内是否存在某一特定对象,并且希望很快了解到对象的存放位置。

向量作为一种对象提供了比数组更多的方法,但需要注意的是,向量只能存储对象,不能直接存储简单数据类型,因此下列场合适用于使用数组:
  • 所需处理的对象数目大致可以确定。
  • 所需处理的是简单数据类型。

向量的使用

向量必须要先创建后使用,向量的大小是向量中元素的个数,向量的容量是被分配用来存储元素的内存大小,其大小总是大于向量的大小。 下面是 Vector 的构造方法:
    Vector(); //创建空向量,初始大小为 10
    Vector(int capacity); //创建初始容量为 capacity 指定的空向量
    Vector(int capacity,int incr) //指定向量容量及其增量参数创建空向量

为优化存储管理,Java 的每个向量均可以使用一个“初始容量”和一个“容量增量”,在初始容量满了以后,下一次在存储一个对象到向量中时,这个向量自动为该对象和额外的对象分配空间。通过分配多于所需的内存空间,向量减少了必须的内存分配的数目。这样能够有效地减少分配所消耗的时间,每次分配的额外空间数目将由创建向量时指定的增量所决定。

如果没有指定增量或增量为 0,则该向量的大小在每次分配时都将加倍。除了构造方法外,向量类还提供了三个属性变量,分别为:
    protected int capacityIncrement;  //当向量大小不足时,所用的增量大小
    protected int elementCount; //向量的元素个数
    protected Object elementData[]; //向量成员数据所用的缓冲
一旦创建了向量类的实例,就可以用其方法来执行插入、删除以及查找对象等操作,向量类提供了极为丰富的方法,表 8-5 中给出了其中一些主要的方法。
表 8-5 Vector 定义的常见方法
方法 功能
void addElement(Object element) 将给定对象 element 增加到向量末尾
int capacity() 返回向量容量
boolean contains(Object element) 若向量中包含了 element 返回 true,否则返回 false
void copyInto(Object Array[]) 将向量元素复制到指定数组
synchronized Object elementAt(int index) 返回指定下标的元素,若下标非法,抛出 ArrayIndexOutOfBoundsExecption 异常
void ensureCapacity(int size) 将向量的最小容量设为 size
synchronized Object firstElement() 返回向量的第一个元素,若向量为空,抛出 NoSuchElementException 异常
int indexOf(Object element) 返回 element 的下标,若对象不存在返回-1
int indexOf (Object element,int start) 从指定位置(start)开始搜索向量,返回对象所对应的下标值,若未找到返回-1
void insertElementAt (Object obj,int index) 将给定的对象插入到指定的下标处
boolean isEmpty() 若向量不包括任何元素,返回 true,否则返回 false
synchronized Object lastElement() 返回向量的最后一个元素,若向量为空,抛出 NoSuchElementException 异常
int lastIndexOf(Object element) 从向量末尾向前搜索向量,返回对象的下标值
int lastIndexOf(Object element,int start) 从指定位置开始向前搜索向量,返回给定对象的下标值,若未找到返回-1
void removeAllElements() 删除向量中的所有对象,向量变成空向量
boolean removeElement(Object element) 从向量中删除指定对象 element,若给定的对象在向量中保存多次,则只删除其第一个实例,如果删除成功,返回 true,如果没发现对象,则返回 false
void removeElementAt(int index) 删除由 index 指定位置处的元素
void setElementAt(Object obj,int index) 将给定对象存放到给定下标处,该下标处的原有对象丢失
void setSize(int size) 将向量中的元素个数设为 size,如果新的长度小于原来的长度,元素将丢失,若新的长度大于原来的长度,则在其后增加 null 元素
int size() 返回向量中当前元素的个数
String toString() 将向量转换成字符串
void trimToSize() 将向量的容量设为与当前拥有的元素个数相等
与数组相同,向量对象也可以通过 new 操作符实现。其语句为:

    Vector vector=new Vector();

【例 8-11】测试向量大小和容量的变化及元素的遍历。
//********** ep8_11.java **********
import java.util.*;
class ep8_11{
    public static void main(String args[]){
        Vector <Integer> v=new Vector<Integer>(3,2);
        System.out.println("向量中的元素个数为:"+v.size());
        System.out.println("向量的容量为:"+v.capacity());
        v.addElement(1);
        v.addElement(2);
        v.addElement(3);
        v.addElement(4);
        System.out.println("加入四个元素后容量为:"+v.capacity());
        v.addElement(5);
        System.out.println("当前向量的容量为:"+v.capacity());
        v.addElement(6);
        v.addElement(7);
        v.addElement(8);
        System.out.println("当前向量的容量为:"+v.capacity());
        System.out.println("第一个元素为:"+v.firstElement());
        System.out.println("最后一个元素为:"+v.lastElement());
        if(v.contains(3)){
            System.out.println("向量中包含 3");
        }
        System.out.println("\n 向量中的元素为:");
        for(int i=0;i<v.size();i++){
            System.out.print(v.get(i)+" ");
        }
    }
}

运行结果:
向量中的元素个数为:0
向量的容量为:3
加入四个元素后容量为:5
当前向量的容量为:5
当前向量的容量为:9
第一个元素为:1
最后一个元素为:8
向量中包含 3

向量中的元素为:
1 2 3 4 5 6 7 8

向量的遍历除了可以使用 get 方法循环访问向量的所有元素外,还可以使用 iterator(),返回一个可以遍历的元素列表,然后通过 hasNext()和 next()方法实现遍历,例如:
    Iterator a=v.iterator();
    while(v.hasNext()){
        System.out.println(a.next());
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值