Vector 和 ArrayList 哪一个更好? 为什么?
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)
3:数据增长(Data growth)
从内部的数据结构来看,ArrayList 和 Vector都是使用 数组(Array)的模式存放内容,你需要在程序设计中小心这个本质,当在 ArrayList和 Vector中插入数据时,如果ArrayList或 Vector的对象存储超出了对应的空间(即内部数组长度)。对应的ArrayList或 Vector将会扩充它们的内部的数组。 Vector默认扩充内部数组的一倍,就是相当于两个以前的数组的大小,而ArrayList仅仅增加50%的大小,根据你使用哪个类来确定增加一个元素的性能影响,最好的方式就是设置对象的初始化容量为需要的最大容量,这样能够避免以后插入元素后的自增长,(自增长会涉及到数组内部元素的复制到新创建的数组中),如果你不知道数据将增长到多大,但是你知道数据增长的速率,Vectory能够拥有轻微的优势,因为你能够设置增长的值。
至于为什么要把 Vector设置为同步和自增长为自身大小的一倍而ArrayList设置为非同步自增长为自身大小的一半:
八卦一下:设置为同步说明数据增长比较激烈,就是增长速率和频率较大,如果设置为一半,很快数组又满了,所以设置为一倍。
而ArrayList相应的 增长速率慢,设置为不同步,不容易出现多线程并发问题。
八卦只是个人理解,欢迎拍砖。
4:使用模式(usage pattern)