Java Vector 矢量


Vector

  • Vector 实现动态数组,这与 ArrayList 相似,但两者不同的是,Vector是同步的,并且它包含了许多从以前版本遗留下来的不属于类集框架的方法,随着 Java 2 的发布,Vector 被重新设计来扩展 AbstractList 和实现 List 接口,因此现在它与类集是完全兼容的;
  • java.util.Vector,详见:Class Vector

1. 构造方法

  • 所有的矢量都有一个原始容量,达到容量后再存储对象时,矢量会自动为那个对象分配空间,同时为别的对象增加额外的空间;
  • 矢量减小了可能产生的分配次数,这种次数的减少是很重要的,因为分配内存是很花时间的;
  • 在每次的再分配中,分配的额外空间的总数由在创建矢量时指定的增量来确定,如果没有指定增量,在每个分配周期,适量的大小增加一倍;
构造方法说明
Vector()创建一个原始大小为10的默认矢量
Vector(int size)创建一个原始容量由 size 指定的矢量
Vector(int size, int increase)创建一个原始容量由 size 指定,并且其增量由 increase 指定的矢量,增量指定了矢量每次允许向上改变大小的元素的个数
Vector(Collection c)创建一个包含了类集 c 中元素的矢量,这个构造方法在 Java 2 中被添加

2. 定义的保护数据成员

  • 增量值被存储在 capacityIncrement 中,矢量中的当前元素的个数被储存在 elementCount 中,保存矢量的数组被存储在 elementData 中;
int capacityIncrement;
int elementCount;
Object elementData[];

3. 矢量的方法

  • 除了由 List 定义的类集方法外, Vector 还包含几个从之前版本遗留下来的方法:
类型方法说明
final voidaddElement(Object o)将 o 指定的对象加入矢量
intcapacity()返回矢量的容量
Objectclone()返回调用矢量的一个副本
booleancontains(Object o)如果 o 被包含在矢量中,返回 true
voidcopyInto(Object array[ ])将包含在调用矢量中的元素复制到由 array 指定的数组中
ObjectfirstElement()返回矢量的第一个元素
Enumerationelements()返回矢量中元素的一个枚举
ObjectelementAt(int index)返回由 index 指定位置的元素
intindexOf(Object o)返回 o 首次出现的位置索引,如果对象不在矢量中,返回 -1
intindexOf(Object o, int start)返回 o 在矢量中从 start 位置起第一次出现的位置索引,如果对象不属于矢量的这一部分,返回-1
voidinsertElementAt(Object o, int index)在矢量中,在 index 指定的位置处加入 o
booleanisEmpty()如果矢量是空的,返回 true
ObjectlastElement()返回矢量中的最后一个元素
intlastIndexOf(Object o)返回 o 在矢量中最后一次出现的位置索引,如果对象不在矢量中,返回-1
intlastIndexOf(Object o, int start)返回 o 在矢量中最后一次出现的位置索引,如果对象不包含在矢量中,返回-1
voidremoveAllElements()清空矢量,在这个方法执行以后,矢量的大小为 0
booleanremoveAllElement(Object o)从矢量中删除 o,如果矢量中有多个实例,则其中第一个实例被删除,如果删除成功,返回 true
voidremoveElementAt(int index)删除由 index 指定位置处的元素
voidsetElementAt(Object o, int index)将由 index 指定的位置分配给 o
voidsetSize(int size)将矢量中元素的个数设为 size,如果新的长度小于旧的长度,元素将丢失,如果新的长度大于旧的长度,则在其后增加 null 元素
intsize()返回矢量中当前元素的个数
StringtoString()返回矢量的字符串等价形式
voidtrimToSize()将矢量的容量设为与其当前拥有的元素的个数相等

4. 矢量的使用

  • 矢量继承了枚举(Enumeration)接口,可以使用几种遗留下来的方法;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

public class test {
    public static void main(String[] args) {
        Vector v = new Vector();
        v.add("A");
        v.add("B");
        v.add("C");
        Enumeration e = v.elements();
        while (e.hasMoreElements()) {
            System.out.print(e.nextElement() + "\t");
        }
        System.out.println();
        //Java 2 后,Vector 增加了对迭代方法的支持
        Iterator it = v.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + "\t");
        }
    }
}

5. 矢量类的子类

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* * 基于数组的向量实现 */ package dsa; public class Vector_Array implements Vector { private final int N = 1024;//数组的容量 private int n = 0;//向量的实际规模 private Object[] A;//对象数组 //构造函数 public Vector_Array() { A = new Object[N]; n = 0; } //返回向量中元素数目 public int getSize() { return n; } //判断向量是否为空 public boolean isEmpty() { return (0 == n) ? true : false; } //取秩为r的元素 public Object getAtRank(int r)//O(1) throws ExceptionBoundaryViolation { if (0 > r || r >= n) throw new ExceptionBoundaryViolation("意外:秩越界"); return A[r]; } //将秩为r的元素替换为obj public Object replaceAtRank(int r, Object obj) throws ExceptionBoundaryViolation { if (0 > r || r >= n) throw new ExceptionBoundaryViolation("意外:秩越界"); Object bak = A[r]; A[r] = obj; return bak; } //插入obj,作为秩为r的元素;返回该元素 public Object insertAtRank(int r, Object obj) throws ExceptionBoundaryViolation { if (0 > r || r > n) throw new ExceptionBoundaryViolation("意外:秩越界"); if (n >= N) throw new ExceptionBoundaryViolation("意外:数组溢出"); for (int i=n; i>r; i--) A[i] = A[i-1];//后续元素顺次后移 A[r] = obj;//插入 n++;//更新当前规模 return obj; } //删除秩为r的元素 public Object removeAtRank(int r) throws ExceptionBoundaryViolation { if (0 > r || r >= n) throw new ExceptionBoundaryViolation("意外:秩越界"); Object bak = A[r]; for (int i=r; i<n; i++) A[i] = A[i+1];//后续元素顺次前移 n--;//更新当前规模 return bak; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值