Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能。

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

可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量。

向量和数组分别适用于不同的场合,一般来说,下列场合更适合于使用向量:

  • 如果需要频繁进行对象的插入和删除工作,或者因为需要处理的对象数目不定。
  • 列表成员全部都是对象,或者可以方便的用对象表示。
  • 需要很快确定列表内是否存在某一特定对象,并且希望很快了解到对象的存放位置。

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

  • 所需处理的对象数目大致可以确定。
  • 所需处理的是简单数据类型。

向量的使用

向量必须要先创建后使用,向量的大小是向量中元素的个数,向量的容量是被分配用来存储元素的内存大小,其大小总是大于向量的大小。下面是 Vector 的构造方法:

 Vector(); //①创建空向量,初始大小为 10
Vector(int initialCapacity); //②创建初始容量为 capacity 的空向量
Vector(int initialCapacity,int capacityIncrement); //③创建初始容量为 initialCapacity,增量为 capacityIncrement 的空向量

使用第①种方式系统会自动对向量进行管理。

使用第②种方式,会创建一个初始容量(即向量可存储数据的大小)为 initialCapacity 的空向量,当真正存放的数据超过该容量时,系统会自动扩充容量,每次增加一倍。

使用第③中方式,会创建一个初始容量为 initialCapacity 的空向量,当真正存放的数据超过该容量时,系统每次会自动扩充 capacityIncrement。如果 capacityIncrement 为0,那么每次增加一倍,。

通过分配多于所需的内存空间,向量减少了必须的内存分配的数目。这样能够有效地减少分配所消耗的时间,每次分配的额外空间数目将由创建向量时指定的增量所决定。

除了构造方法外,向量类还提供了三个属性变量,分别为:

 protected int capacityIncrement; //当向量大小不足时,所用的增量大小
protected int elementCount; //向量的元素个数
protected Object elementData[]; //向量成员数据所用的缓冲

一旦创建了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();
系列文章:

Java知多少(78)Java向量(Vector)及其应用的更多相关文章

  1. java向量 vector

    Vector 向量 是java.util 包里的一个类,该类继承AbstractList,实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据,但数组的大小(长度)是固定的,而Vector ...

  2. Java知多少(完结篇)

    Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...

  3. Java知多少(下)

    Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...

  4. Java知多少(112)数据库之删除记录

    删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...

  5. Java知多少(111)数据库之修改记录

    修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是:    update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...

  6. Java知多少(110)数据库之插入记录

    插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...

  7. Java知多少(109)数据库更新

    数据库更新操作包括数据表创建.删除.以及数据表记录的增加.删除.修改等操作.如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句 ...

  8. Java知多少(108)数据库查询简介

    利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...

  9. Java知多少(107)几个重要的java数据库访问类和接口

    编写访问数据库的Java程序还需要几个重要的类和接口. DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中 ...

随机推荐

  1. C# DataGridView转DataTable

    public static DataTable ToDataTable(this DataGridView dataGridView, string tableName = null) { DataG ...

  2. FlarumChina SQL injection Vulnerability

    First,We need to download our vulnerable program in GitHub links:https://github.com/skywalker512/Fla ...

  3. 最小生成树之克鲁斯卡尔(kruskal)算法

    #include <iostream> #include <string> using namespace std; typedef struct MGraph{ string ...

  4. 类文件结构-----Class类文件的结构

    ①无关性的基石 “与平台无关的”得理想最终实现在操作系统的应用层上:Sun公司和其他虚拟机提供商发布了许多可以在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序 ...

  5. Redis集群方案总结

    Redis集群方案总结 Redis集群方案总结Codis其余方案Redis cluster 目前,Redis中目前集群有以下几种方案: 主从复制 哨兵模式 redis cluster 代理 codis ...

  6. Tcp的三次握手,以及原理详解

    http://blog.sina.com.cn/s/blog_6002b97001018fxh.html

  7. 支付宝集成遇到"_EVP_DecodeBlock",referenced from:报错

    遇到问题报错如下: 调试了好多遍,始终不行,检测各种依赖库,发现并没有少什么.后来发现支付宝demo里比文档讲解里面多两个.a文件 直接加上就好了

  8. win7 wamp 64位 php环境如何开启curl服务?

    这篇文章主要介绍了PHP简单开启curl的方法,较为详细的讲述了PHP开启curl函数库的具体步骤与相关注意事项,需要的朋友可以参考下 本文讲述了PHP简单开启curl的方法.分享给大家供大家参考,具 ...

  9. C# 论接口的意义---共享协议

    我对接口的理解: 接口是一种协议.是一种模型. 我认为接口的意义: 接口更好的实现了项目资源共享 , 指定了可共享的范围 , 允许可使用而不可篡改的项目资源 . 我认为接口和模型是一类的: 接口一般与 ...

  10. 使用Quartz搭建定时任务脚手架

    定时任务的实现有很多种,在Spring项目中使用一个注解 @Scheduled就可以很快搞定. 但是很难去管理项目中的定时任务,比如说:系统中有多少定时任务,每个定时任务执行规则,修改执行规则,暂停任 ...