Java中顺序表及向量应用浅谈.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java中顺序表及向量应用浅谈

Java中顺序表及向量应用浅谈摘 要: 对顺序表与向量做简单介绍,着重比较两者的数据结构、容量增长、线程安全性和运行效率,得出各自适用范围,并通过示例方便读者了解两者的应用。 关键词: 数组;向量;顺序表 程序设计语言中通过数组将若干同类型数据有序的集合在一起,各元素位置固定,元素个数就是数组的长度。但当集合中删除或插入元素时,数组就显得捉襟见肘,c++使用链表,Java先是用向量(Vector),后又可通过顺序表(ArrayList) 完成。Vector和ArrayList均可保存一列数据,并提供众多方法来操作这些数据。在JDK1.5之后,Vector被重新设计为泛型,成为AbstractList的子类,实现了Iterator接口,与集合充分兼容。 1 顺序表(ArrayList)与向量(Vector)的基本概念 ArrayList是一个泛型类,支持动态数组,通过类型参数表示其存储元素的类型。它预先给ArrayList对象分配存储空间,插入元素时,若空间不够则自动增加空间,删除时则自动减少空间。ArrayList常用的方法有add(插入)、get(获得)、remove(删除)、set(设置)、size(获得容量)等。 Vector继承自AtrastractList,实现了Serializable,Cloneable,Iterable,Collection,List,RandomAccess的接口,是曾经使用最为广泛的顺序表。Vector常用的方法除了ArrayList的还有addElement(增加)、elementAt(获得)、indexOf和lastindexOf(查找)、setSize(设置容量)等,并含有capacityIncrement(容量增长数目)、elementCount(元素数目)、elementData(数据实际存储区域)3个成员变量。 2 顺序表(ArrayList)与向量(Vector)的比较 2.1 ArrayList与Vector的数据结构比较 ArrayList和Vector均将数据存储在私有的Object数组中,ArrayList源代码是:“private transient Object elementData[];”,Vector源代码是:“protected Object elementData[];”。在增加数据时(如用add()及addAll()),先判断elementData[]的大小是否够用,若不够则构造一更大的数组,用System.arraycopy()将原数组elementData []拷贝到这个数组中,并把add()的参数增加进去。 2.2 容量增长算法比较 ArrayList和Vector内部都用数组存储对象,但在构造新数组确定容量时采用了不同的算法。Vector通过私有成员变量“capacityIncrement”进行控制,当数组大小不够时,若capacityIncrement为正数,新数组容量增加capacityIncrem ent;若capacityIncrement为非正,新数组容量将扩容为原数组的两倍。源代码见下表: int oldCapacity=elementData.length; int newCapacity=(capacityIncrement0)?(oldCapaci ty +capacityIncrement) :(OldCapacity*2); ArrayList扩充数组容量时均按照新数组容量是原数组1.5倍的原则进行。源代码如下:int newCapacity =(oldCapa city*3)/2+1; 当遇到添加元素过多,如调用addAll()方法,元素个数超过新数组容量时,Vector和ArrayList都会自动再扩容到新数组要求的最小容量。源代码如下: if(newCapacityminCapacity) newCapacity=minCapa city; 2.3 线程的安全性比较 Vector是线程安全的,它通过同步机制保证多个线程存储时不会出现错误。而ArrayList没有使用同步机制,适合单线程的存储,效率更高。 2.4 运行效率比较 当查找一个指定位置的元素或在末尾增加、移除一个元素时,ArrayList和Vector所需时间相同。当在其他位置增加或移除元素时,时间则呈线形增长,这时一般选择其他的集合操作类。 3 使用顺序表(ArrayList)和向量(Vector)的示例 笔者通过模拟扑克发牌进行ArrayList和Vector应用研究和比较。程序用了3个类,“play”类主程序生成玩家和发牌机的对象,开启发牌机并

文档评论(0)

docman126 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档