您的位置:首页 > 编程语言 > Java开发

Java集合框架里ArrayList Vector和LinkedList的区别

2016-04-04 13:21 411 查看


一、Vector和ArrayList

相同点:

Vector和ArrayList都是基于储存元素的Object[] array来实现的,是根据索引来访问元素。

不同点:

1)同步性

Vector的方法大部分是同步的,是线程安全的

而ArrayList的方法不是同步的。

由于线程的同步必然要影响性能,Vector开销就比较大,这样就造成ArrayList比Vector更快些,不过在最新的JVM中,这两个类的速度差别是很小的,几乎可以忽略不计。正常情况下,大多数的Java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。

2)数据增长:

当集合中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小;

ArrayList就有利于节约内存空间。

补充: Hashtable & HashMap

Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。

备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。

二、ArrayList和LinkedList区别:

1.ArrayList是实现了基于动态数组的数据结构;

LinkedList基于双向循环链表的数据结构。

2.ArrayList的所有数据是在同一个地址上,而LinkedList的每个数据都拥有自己的地址.

3.数据插入 :比如在i节点插入一个新数据

ArrayList:循环到i节点,插入一个新数据,然后把i节点后面的所有的数据的index加1. ->操作多

LinkedList:循环到i节点,把前一个节点的后续链接到新数据,然后把新数据链接到后一个数据就可以了. ->操作少

结论:平均效率LinkedList要好.

!!这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

4.数据删除 :比如删除i节点数据

ArrayList:循环到i节点,然后把i节点后面的所有的数据的index减1. ->操作多

LinkedList:循环到i节点,把前一个节点的后续链接到i节点的后一个数据就可以了. ->操作少

结论:平均效率LinkedList要好.

5.数据查询 :比如查询i节点数据

ArrayList:循环到i节点. ->操作少

LinkedList:循环到i节点. ->操作少,但由于每个数据的地址不一样,查询比如 ArrayList慢.

结论:平均效率 ArrayList要好.

6.数据更新 :比如更新i节点数据

ArrayList:循环到i节点,把数据更新. ->操作少

LinkedList:循环到i节点,把前数据更新. ->操作少,但由于查询速度没有 ArrayList好,所有效率没有 ArrayList好.

结论:平均效率ArrayList要好.

7.查找操作indexOf,lastIndexOf,contains等,两者差不多。

8.随机查找指定节点的操作get,ArrayList速度要快于LinkedList.

这里只是理论上分析,事实上也不一定,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。

9、LinkedList更适用于:没有大规模的随机读取;大量的增加/删除操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: