Java知多少(78)Java向量(Vector)及其应用
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)及其应用的更多相关文章
- java向量 vector
Vector 向量 是java.util 包里的一个类,该类继承AbstractList,实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据,但数组的大小(长度)是固定的,而Vector ...
- Java知多少(完结篇)
Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...
- Java知多少(下)
Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
- Java知多少(111)数据库之修改记录
修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是: update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...
- Java知多少(110)数据库之插入记录
插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...
- Java知多少(109)数据库更新
数据库更新操作包括数据表创建.删除.以及数据表记录的增加.删除.修改等操作.如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句 ...
- Java知多少(108)数据库查询简介
利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...
- Java知多少(107)几个重要的java数据库访问类和接口
编写访问数据库的Java程序还需要几个重要的类和接口. DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中 ...
随机推荐
- 好用到哭的listary
好用到哭的listary(提醒:everything太占内存了) 官网:http://www.listary.com/ 快捷键 启动方式:alt+s .双击Ctrl Ctrl+g:快速将当前打开目录作 ...
- android studio 汉化 svn插件汉化。布局文件 属性 汉化 public.xml
android studio 汉化 SvnBundle.properties D:\Android Studio\plugins\svn4idea\lib resources_en.jar\org\j ...
- 洛谷.3374.[模板]树状数组1(CDQ分治)
题目链接 简易CDQ分治教程 //每个操作分解为一个有序数对(t,p),即(时间,操作位置),时间默认有序,用CDQ分治处理第二维 //对于位置相同的操作 修改优先于查询 //时间是默认有序的 所以可 ...
- Android避免快速双击按钮最简单好用的方式
代码如下,直接放到工具类中即可.类可以实现Onclicklistener,然后重写onClick方法,直接将该函数写在onClick方法中即可,这样对于所有的点击事件都将生效. 避免了快速双击出现的异 ...
- 在web中实现当前变量和前一个的比较
/*if (attribute == null) {// 如果缓存中没有存过UploadTimeObj对象,那么创建对象,并将该对象存入缓存中 UploadTim ...
- redis 在 php 中的应用(Server[ 服务器] 篇)
本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: Server(服务器) BGREWRITEAOF BGSA ...
- db2 表空间容量
Db2 connect to xxx Db2 “LIST TABLESPACES SHOW DETAIL” Tablespace ID = 7 Name = TSASNAA Type = Databa ...
- 前端AngularJS后端ASP.NET Web API上传文件
本篇体验使用AngularJS向后端ASP.NET API控制器上传文件. 首先服务端: public class FilesController : ApiController { //usi ...
- linux 启动 Oracle 实例
启动数据库实例,分为两步:第一步,启动监听:第二步,启动数据库实例. 一.如何启动数据库实例 1.进入到sqlplus启动实例 --“切换到oracle用户” su - oracle --“打开监听” ...
- mod_wsgi的工作模式和配置
Openstack所有提供API接口的服务都是python web server,而其本身性能很弱,目前已经将它们配置到了apache上.但对于如何设置mod_wsgi的参数,我一直没有好好去阅读其文 ...