说出ArrayList,Vector, LinkedList的存储性能和特性

来源:互联网 发布:oracle数据库索引 编辑:程序博客网 时间:2024/05/04 03:01

讨论1:

*ArrayList与Vector都是基于数组实现的这就说明ArrayList与Vector适合做遍历而不适合做频繁的插入和删除。
 * vector是线程同步的,所以它也是线程安全的,而arraylist是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用arraylist效率比较高。

* 如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.
 * 如过在集合中使用数据量比较大的数据,用vector有一定的优势
 * LinkedList是基于链表实现的,所以它生来就是为了频繁插入与删除对象。


讨论2:内存占用 基于数组实现的List,在动态扩展时会产生新的数组,然后把旧数组里的内容复制到新数组里,
 * 这会产生大量的不再被使用的对象引用变量等待系统回收。而基于链表实现的List就不会有这种问题。

* 讨论3:toArray()方法
 * 基于数组实现的List会直接返回一个底层数组的拷贝(使用了System.arraycopy方法),基于链表实现的List会新生成一个数组。

 

 /******************************************************************说法2********************************************************************/

ArrayListVector主要从二方面来说.

.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的.

.数据增长:当需要增长时,Vector默认增长为原来一倍,而ArrayList却是原来的一半. ArrayListVector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,

它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较 ArrayList差,LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快.

0 0
原创粉丝点击