- 浏览: 110849 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yongliang567:
楼主,你对双重检查加锁这种单例实现方法的分析是对的,但是你既然 ...
关于单例(Singleton)模式实现方式的反思 -
xbl001529:
支持IE8吗?
[效果]JS折叠菜单
Vector
类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector
的大小可以根据需要增大或缩小,以适应创建 Vector
后进行添加或移除项的操作。
Vector继承自AtrastractList,实现了 Serializable, Cloneable, Iterable, Collection, List, RandomAccess 的接口。
每个Vector会试图通过维护 capacity
和 capacityIncrement
来优化存储管理。capacity
始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按 capacityIncrement
的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。
构造函数Vector(),实现一个空向量,其内部数组大小为10,标准容量增量为0。
目前看来,Vector和ArrayList很像,二者的区别可参见以下比较(摘自http://java.chinaitlab.com/advance/37954.html ):
Vector 和 ArrayList的不同
有的时候 Vector更好一些;有的时候ArrayList 更好一些;有的时候你一个也不想用。但愿,你不是在期望一个简单明了的答案,因为答案因你在用他们做什么而定。下面是要考虑的四个方面:
API
同步-Synchronization
数据增长-Data growth
使用方法-Usage patterns
让我一个一个来解释吧。
API
在The Java
Programming Language (Addison-Wesley, June 2000) 中Ken Arnold, James
Gosling, 和 David Holmes
是这样描述Vector的,它是更ArrayList类似的一个东西,所以从API的观点来看,它们俩是很相似的。但是,它们之间还是有些微的差别的。
Synchronization
Vectors是可同步化的,意思就是说,任何操作Vector的内容的方法都是线程安全
的,相反的,另一方面,ArrayList是不可同步化的,所以也不是线程安全
的。如果你知道了这些的话,你就会发现,Vector的同步会让它在性能发方面有一些小问题。所以,如果你不需要线程安全的话,那么就使用ArrayList吧。为什么要为没有必要的同步付出代价呢?
Data growth
实际上,不管是ArrayList还是Vector,在它们内部都是使用一个Array来保存数据的。编程过程中,在使用它们任何一个的时候,你都需要
记住这一点。你在往一个ArrayList或者Vector里插入一个元素的时候,如果内部数组空间不够了,这个对象(译者按:指的是你使用的
ArrayList或者Vector)就要扩展它的大小。Vector在默认情况下是产生一个双倍大小,而ArrayList增加50%的大小。只要你合
理的使用这些类,你就可以结束你在增加新的元素的时候所付出的性能代价。把对象(译者按:指的是你使用的ArrayList或者Vector)的初始化容
量指定为你编程过程中所能用到的最大的容量总是最好的办法。仔细的指定容量,你可以避免以后改变内部Array容量,所要付出的代价。如果你并不知道到底
有多少个数据,当是你知道数据的增长率,Vector确实有一点点优势,因为你可以指定增加值(译者按,如果没有猜错的话,作者说的方法应该是
setSize(int newSize) Sets the size of this vector.)。
Usage patterns
ArrayList和Vector在从指定位置取得元素,从容器的末尾增加和删除元素都非常的有效,所有的这些操作都能在一个常数级的时间(O(1))
内完成。但是从一个其他的位置增加和删除一个元素就显得颇为费时,差不多需要的时间为O(n-i),这里的n代表元素个数,i代表要增加和删除的元素所在
的位置。这些操作需花费更多的时间,因为你需要挨个移动i和更高位置的元素。那么,以上这些到底说明了什么呢?
这意味着,如果你
取得一个元素,或者从数组末尾增加或删除一个元素的话,随便你使用Vector和ArrayList。如果你想要对数组内容做其他操作的话,那么就为自己
好另一个容器吧。比喻说,LinkedList可以在常数级时间(O(1))内为任意一个位置的元素增加和删除。但是,取得一个元素,会稍微慢一点,时间
要用O(i) ,这个i是元素的位置。通过ArrayList也是很简单的,因为你可以简单使用一个索引,而不是构造一个iterator
。LinkedList也为每个插入的元素建立一个内部对象。所以,你也必须知道,同时产生了垃圾对象。
最后,Practical Java
(Addison-Wesley, Feb. 2000) Peter Haggar
里的“实践41“建议你使用一个普通的原始的数组来代替Vector和ArrayListe,特别是对效率优先的代码来说。通过使用数组(array),
你可以避免同步,额外的方法调用,非理想化的大小改变。你付出的只是额外的开发时间。
发表评论
-
通过spring取得国际化文件
2012-03-23 16:18 1851/* * @(#) ScheduleController ... -
java 能否做成C/S架构的,同时他能否写程序调用IE框架
2008-10-20 14:21 1005据说现在java在C/S方面 有了很大进步,想着想写个程序。通 ... -
转载 java面向对象—抽象类、接口与多继承
2008-10-20 09:49 1231有时候,我们可能想要构造一个很抽象的父类对象,它可能仅仅代表一 ... -
JAVA命名和目录服务(JNDI)
2008-10-17 10:59 923在 J2EE 中, JNDI 的目的是用来查找 J2EE 服 ... -
java高级编程:基于JNDI的应用开发
2008-10-17 10:58 1083基于JNDI的应用开发 ... -
JAVA里protected属性和方法的完整测试
2008-10-13 13:53 1271先说几个protected的使用原则,后面再看对应的例子。 ... -
java中中文问题
2008-10-09 13:36 8511、如果一个数据库的编码是iso8859-1的,我在java代 ... -
关于单例(Singleton)模式实现方式的反思
2008-10-06 15:57 1125大家都知道单例模式,也知道实现的方法,最近看到几个网友推荐的文 ... -
如何使用Static的变量和方法
2008-09-26 14:25 844有时你希望定义一个类 ... -
dom4j读取xml(笔记)
2008-09-26 10:20 11138Java代码 SAXReader reader ... -
关于struts的几个注意的地方 第一章
2008-09-26 10:14 726J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手 ... -
关于struts的几个注意的地方
2008-09-26 09:59 719关于struts的几个注意的 ... -
Linux 文件命令精通指南
2008-07-15 10:01 940为刚接触 Linux 文件命令的初学者提供的速成教程 ... -
Java 设计模式与建模专题
2008-07-09 15:32 962http://www.ibm.com/developerwor ... -
Java并发编程基础知识片段(一)
2008-06-27 16:45 946原创 Java并发编程基础知识片段(一)收藏 Java 5并发 ... -
关于junit实现过程详细介绍
2008-04-14 16:16 941测试分类:白箱测试、黑箱测试、单元测试、集成测试、功能测试…… ... -
循序渐进学习Junit
2008-04-14 16:15 1187用JUnit可以大量减少Java ... -
JUnit入门
2008-04-14 16:14 795JUnit是一个开源的java单元测试框架。在1997年,由 ... -
Java正则表达式入门
2008-03-18 17:38 864Java中正则表达式使用方法详解: http://tech.1 ... -
Java正则表达式入门
2008-03-18 13:56 844众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ...
相关推荐
java vector java vector java vector java vector
Java Vector的相关知识 Java Vector的相关知识
vector 使用实例vector 使用实例vector 使用实例vector 使用实例vector 使用实例
本文是一篇word文档,主要介绍了java中vector的用法,让一些初学者更加了解vector的用法。
主要介绍了Java Vector类详解及实例代码的相关资料,需要的朋友可以参考下
主要介绍了java Vector和ArrayList的分析及比较的相关资料,Vector是多线程安全的,而ArrayList不是,本文主要做对比对这两个方法,需要的朋友可以参考下
用Vector向量实现线性表用Vector向量实现线性表
javavector
内含简单的java String 类方法,简单的继承 接口以及Scanner类的使用实例
自己实现的vector,优化的动态内存管理
详细介绍Java中ArrayList的使用方法以及与vector的对比
Java编写的一个容器类,包含插入删除等功能。
本文的学习方式是先对JAVA Vector有个整体认识,然后再学习它的源码,最后再通过实例来学会使用。
主要介绍了深入分析JAVA Vector和Stack的具体用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了Java vector的详解及实例的相关资料,需要的朋友可以参考下
本篇文章是对Java中Vector与ArrayList的区别进行了详细的分析介绍,需要的朋友参考下
javase 中vector类 的使用及线程同步 原理
vector原始代码亚太发展集团 该工具从完整和不完整的Java源代码生成属性程序依赖关系图。 图形存储为可用于图形表示学习框架的特征向量。 请在此处找到我们的APDG嵌入网络() 依存关系 该工具将应用以下软件: 沃拉...
vector原始代码#信息 作者:凯文·贾伯特() 版权:版权所有(c)2011 Kevin Jalbert 执照:麻省理工学院执照 介绍 变异分数预测器是一种技术,它可以预测Java项目中方法和类的变异分数。 预测突变评分的好处在于...