Vector 和 ArrayList 比较
有时用Vector更好一点,有时用ArrayList更好一点,不能准确容易的给出答案,因为要视具体情况而定,有四个主要考虑的因素:
1:API
2: 同步(synchronization)
3:数据增长(Data growth)
4:使用模式(Usage pattern)
下面分别意义探讨:
1:API
在Ken Arnold, James Gosling, and David Holmes 的 Java 程序语言的描述中,Vector和ArrayList是类比设计的,从API 的角度来看,两个类有很多相似性,但是两个类也有一些不同。
2:同步(Synchronization)
从同步性的角度考虑 : Vector是同步的,一些访问Vector的内容的方法是线程安全的,而ArrayList是非同步的,访问ArrayList的内容的方法是线程不安全的,因为有这个不同,使用synchronized关键字修饰的,将会在性能上有所下降,因此如果你不需要一个线程安全的集合,使用ArrayList。不用花费不必要的synchronization性能开销。
3:数据增长(Data growth)
从内部的数据结构来看,ArrayList 和 Vector都是使用 数组(Array)的模式存放内容,你需要在程序设计中小心这个本质,当在 ArrayList和 Vector中插入数据时,如果ArrayList或 Vector的对象存储超出了对应的空间(即内部数组长度)。对应的ArrayList或 Vector将会扩充它们的内部的数组。 Vector默认扩充内部数组的一倍,就是相当于两个以前的数组的大小,而ArrayList仅仅增加50%的大小,根据你使用哪个类来确定增加一个元素的性能影响,最好的方式就是设置对象的初始化容量为需要的最大容量,这样能够避免以后插入元素后的自增长,(自增长会涉及到数组内部元素的复制到新创建的数组中),如果你不知道数据将增长到多大,但是你知道数据增长的速率,Vectory能够拥有轻微的优势,因为你能够设置增长的值。
至于为什么要把 Vector设置为同步和自增长为自身大小的一倍而ArrayList设置为非同步自增长为自身大小的一半:
八卦一下:设置为同步说明数据增长比较激烈,就是增长速率和频率较大,如果设置为一半,很快数组又满了,所以设置为一倍。
而ArrayList相应的 增长速率慢,设置为不同步,不容易出现多线程并发问题。
八卦只是个人理解,欢迎拍砖。
4:使用模式(usage pattern)
ArrayList和Vector都是比较好的在检索特定位置 的元素的时候以及在集合的末尾增加和移除元素,所有以上的操作都是在O(1)的线性时间,但是如果增加和移除一些别的位置的元素(非最末尾位置)需要更昂贵的线性时间开销为O(n-i),n代表了元素的总个数,i代表了插入或移除的索引位置,这些操作代价更大,因为不得不移动索引i后端所有的元素,这意味着什么呢?
这意味着你先查找到索引为以及 i 以后 的元素,然后在数组的末尾插入和移除该元素。如果你想做插入或删除,可以考虑一些别的集合类,例如:LinkedList能够增加或移除一些位置的元素在常量时间O(1)内,但是索引元素的位置比较慢,需要O(i)的时间开销,i 是需要的元素的索引,遍历ArrayList是很容易的,因为你能够简单的使用索引代替创建一个迭代器,LinkedList也为每一个插入的元素创建一个内部的对象,因此你必须意识到额外的垃圾被创建。
最后声明:你能够使用最普通的数组来代替Vector或者ArrayList,尤其是因为标准代码的性能,使用数组能够避免同步(synchronization),额外的方法调用,最适度的调整大小,你仅仅需要花费额外的开发时间。通过array能够为您的程序量身定做需要的集合。
主要内容:1 ArrayList和Vector的区别是什么,2 Java ArrayList的例子,3 Java Vector的例子1 ArrayList和Vector的区别是什么 ArrayList和Vector都实现List接口,且存储元素都是有序的。 但是,ArrayList和Vector类之间还是很多区别的: ArrayList Vector ArrayList是非同步。(线程不安全) Vector是同步的。(线程安全) 如果元素数量超出其容量,ArrayList将增加当前数组大小的50
本文向大家介绍详解Java中Vector和ArrayList的区别,包括了详解Java中Vector和ArrayList的区别的使用技巧和注意事项,需要的朋友参考一下 首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。 3个具体实现类的相关区别如下: 1.A
问题内容: 两种数据结构ArrayList和Vector之间有什么区别,应在哪里使用它们? 问题答案: 我最喜欢动态查询的条件查询。例如,根据某些参数动态地添加一些订购或省去一些零件(例如限制)要容易得多。 另一方面,我将HQL用于静态和复杂查询,因为它更易于理解/阅读HQL。另外,我认为HQL功能更强大,例如对于不同的联接类型。差异性 向量是同步的,而不是ArrayList。 数据增长方法 如果
本文向大家介绍java中SynchronizedList和Vector的区别详解,包括了java中SynchronizedList和Vector的区别详解的使用技巧和注意事项,需要的朋友参考一下 前言 Vector是java.util包中的一个类。 SynchronizedList是java.util.Collections中的一个静态内部类。 在多线程的场景中可以直接使用Vector类,也可以使
本文向大家介绍C# 中 Array和 ArrayList详解及区别,包括了C# 中 Array和 ArrayList详解及区别的使用技巧和注意事项,需要的朋友参考一下 C# 中 Array和 ArrayList详解及区别 一、Array 的用法 或者 Array类型的变量在声明的同时必须进行实例化(如果初始化至少得初始化数组的大小) 平常我们int[],string[]...事实上就是
本文向大家介绍ArrayList 与 Vector 区别呢?为什么要用Arraylist取代Vector呢?相关面试题,主要包含被问及ArrayList 与 Vector 区别呢?为什么要用Arraylist取代Vector呢?时的应答技巧和注意事项,需要的朋友参考一下 线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的。