JAVA中的集合类(2)

原创 2004年06月23日 23:49:00
  • Vector 还是ArrayList,哪一个更好,为什么?

要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑的因素:

(1)API

(2)同步处理

(3)数据增长性

(4)使用模式

下面针对这4个方面进行一一探讨

API
在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这样的描述,Vector类似于ArrayList.。所有从API的角度来看这两个类非常相似。但他们之间也还是有一些主要的区别的。

同步性

Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。

数据增长

从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

使用模式

在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?

这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。

最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。

PS:此篇文章引用自网络,关于作者:Tony Sintes是BroadVision的首席顾问。它是SUN的认证程序员,并且从1997年就开始使用Java开发程序了。

Java集合类源代码分析二:ArrayList(2)

继续上一篇博客介绍, public E get(int index) { RangeCheck(index); return (E) elementData[ind...
  • lfsf802
  • lfsf802
  • 2015年01月28日 21:27
  • 1299

Java集合类详解

Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMa...
  • u014136713
  • u014136713
  • 2016年08月01日 21:09
  • 118204

Java常用集合类及其区别

面试时时被集合类各种虐,现在就来总结一下Java的集合类及其区别。
  • zhj870975587
  • zhj870975587
  • 2016年03月28日 13:48
  • 4700

Java_集合的工具类—Collections

既然集合很常用,那么肯定就会有相应的工具类,可以直接使用,就不用那么累了,对吧,哈哈。集合也有自己的工具类,那就是:Collections。看清楚,这是带有s的,不是Collection接口。 既然是...
  • Ling912439122
  • Ling912439122
  • 2016年08月31日 23:54
  • 858

一张图让你看清Java集合类(Java集合类的总结)

现在关于Java集合类的文章很多,但是我最近看到一个很有意思图片,基本上把Java集合的总体框架都给展现出来了,很直观。 在这里,集合类分为了Map和Collection两个大的类别。 处...
  • iamzp2008
  • iamzp2008
  • 2014年07月27日 00:52
  • 3167

JAVA集合类——难得的总结

文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41346969 以下资料是在学习中总结出来的,希望对你有所帮...
  • pistolove
  • pistolove
  • 2014年11月24日 21:27
  • 7879

Java集合类和容器类

1.集合类的继承关系: 2.对各个集合类的一些说明: 3.
  • u014522348
  • u014522348
  • 2014年10月24日 10:07
  • 1762

Java中的集合类解析和一些有深入的面试题

Java集合类解析 List、Map、Set三个接口,存取元素时,各有什么特点? List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存...
  • he90227
  • he90227
  • 2014年07月23日 11:32
  • 9703

java中的并发集合类概述

一,普通集合类中线程安全的集合:Vector  && Stack 1,Vector: (1)默认分配初始大小为10的数组,在构造方法中可以指定数组初始大小和增长大小。 (2)线程安全主要是通过在...
  • xiaye1989
  • xiaye1989
  • 2015年11月23日 20:08
  • 1928

java主要集合类的数据结构

一. List  1).ArrayList     ArrayList维护着一个对象数组。如果调用new ArrayList()后,它会默认初始一个size=10的数组。   每次ad...
  • Sup_Heaven
  • Sup_Heaven
  • 2014年09月15日 12:44
  • 1010
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA中的集合类(2)
举报原因:
原因补充:

(最多只允许输入30个字)