要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是
最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑
的因素:
l API
l 同步处理
l 数据增长性
l 使用模式
下面针对这4个方面进行一一探讨
API
在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这
样的描述,Vector类似于ArrayList.。所有从API的角度来看这两个类非常相[b]似。但他们之间也还
是有一些主要的区别的。
同步性
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)避免了同步、额外
的方法调用和不必要的重新分配空间的操作。
LinkedList通过一个双向链接的节点列表实现。要通过索引访问元素,你必须查找所有节点,直至找到目标节点:
相关推荐
- Vector 和 ArrayList 都实现了 List 接口,其中 Vector 是线程安全的,而 ArrayList 不是。ArrayList 在插入和查找性能上通常优于 Vector,因为 Vector 的同步操作会带来额外的性能开销。 - LinkedList 实现了 ...
在 Java 集合框架中,`Vector` 和 `ArrayList` 是两种常用的动态数组实现。它们提供了灵活的数据存储方式,能够根据需要自动调整大小。然而,这两种类型的列表在同步性、性能等方面存在差异,这些差异决定了它们适用...
比较分析Vector、ArrayList和hashtable hashmap数据结构
在Java集合框架中,Vector、ArrayList和LinkedList都是List接口的实现,它们提供了有序集合的功能,允许根据位置进行元素的添加、删除和查找。然而,它们在设计和性能上有着显著的区别。 首先,Vector是Java早期...
首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种方式可以快速地索引数据,但是插入数据需要移动数组元素,性能较慢。Vector 由于使用了 synchronized 方法,因此具有线程安全性,但是这也使得其性能比 ...
在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...
Java中的ArrayList和Vector都是列表(List)接口的实现类,它们在功能上相似,但在细节上存在一些重要的差异。这两个类都是基于数组实现的,但它们的性能特点、线程安全性和扩容策略有所不同。 1. **扩容策略**: ...
ArrayList 和 Vector 都是 Java 中的动态数组,但是它们之间有一些区别。 * ArrayList 是非线程安全的,而 Vector 是线程安全的。 * ArrayList 的性能比 Vector 高,因为 Vector 需要同步锁机制来保证线程安全。 * ...
Java中的ArrayList和Vector都是List接口的实现类,它们都是基于数组实现的动态数组,用于存储对象的有序集合。然而,两者在设计和使用上有显著的区别,主要体现在以下几个方面: 1. **线程安全性**: - `Vector`是...
3. Vector 和 ArrayList 的比较 Vector 和 ArrayList 都是基于数组实现的集合类,但是它们有很多不同之处。 * Vector 是线程同步的,即线程安全的,而 ArrayList 不是线程安全的。 * Vector 的元素数组的初始容量...
Vector 与 ArrayList 的比较 Vector 和 ArrayList 都是 Java 中的集合框架,都是动态数组的实现。但是,它们之间有一个重要的区别:Vector 是同步的,而 ArrayList 是非同步的。这意味着,Vector 是线程安全的,而 ...
本文将深入探讨ArrayList、Vector和LinkedList三种集合类的特点与使用场景,帮助开发者更好地理解它们之间的差异。 #### 一、ArrayList与Vector **1. 存储方式** - **ArrayList** 和 **Vector** 都采用动态数组的...
在Java集合框架中,Vector、ArrayList和LinkedList是三种常见的List接口实现类,它们各自具有不同的特点和适用场景。下面我们将详细对比这三个类的区别。 1. **Vector** - **线程安全**:Vector是线程安全的,因为...
在Java编程语言中,ArrayList、...而Vector虽然提供了线程安全,但其性能通常低于ArrayList和LinkedList,更适合于多线程环境且对性能要求不那么敏感的应用。在实际开发中,选择哪种数据结构应根据具体需求来决定。
在Java编程语言中,`ArrayList`和`Vector`都是实现`List`接口的容器类,它们主要用于存储和管理有序的元素集合。虽然两者都基于数组实现,但在功能特性和性能上存在显著差异。 1. **数据结构实现**: - `ArrayList...
3. **内存消耗**:LinkedList比ArrayList和Vector占用更多的内存,因为它需要存储额外的指针来维护链表结构。 4. **初始容量和增长策略**:预估集合大小并合理设置初始容量,可以减少不必要的扩容操作,提高性能。 ...
在选择LinkedList、ArrayList和Vector时,需要考虑以下几个因素: * 是否需要线程安全:如果需要线程安全,选择Vector;否则,选择ArrayList或LinkedList。 * 是否需要快速插入数据:如果需要快速插入数据,选择...
《Vector、ArrayList、List使用深入剖析》-JAVA中文站(www_java-cn_com).htm
Java中的`Vector`和`ArrayList`都是`List`接口的实现类,它们都用于存储可变大小的有序对象集合。然而,尽管它们有许多相似之处,但也存在显著的区别,主要体现在API、同步、数据增长和使用模式这四个方面。 1. API...
综上所述,尽管`Vector`和`ArrayList`在功能上非常相似,但它们的设计理念和适用场景有所不同。如果你的应用程序运行在多线程环境中,并且不需要考虑性能问题,那么`Vector`是一个不错的选择。然而,在大多数现代...