黑马程序员技术交流社区

标题: 5.ArrayList与LinkedList的对比 [打印本页]

作者: anuo    时间: 2015-11-29 15:34
标题: 5.ArrayList与LinkedList的对比

当程序员们不知道ArrayList与LinkedList的区别时,他们经常使用ArrayList,因为它看起来比较熟悉。然而,它们之前有巨大的性能差别。简而言之,如果有大量的增加删除操作并且没有很多的随机访问元素的操作,应该首先LinkedList。如果你刚接触它们,请查看 ArrayList vs. LinkedList来获得更多关于它们性能的信息。
作者: Ansel_young    时间: 2015-11-29 17:11
anuo 发表于 2015-11-29 15:34
当程序员们不知道ArrayList与LinkedList的区别时,他们经常使用ArrayList,因为它看起来比较熟悉。然而, ...

我以为会有总结的东西
作者: 曾宇    时间: 2015-11-29 18:20
说一说我的理解吧!
ArrayList 你可以想象成火车票和座位,你需要对号入座,不然会和其他乘客产生冲突。当你选择退票时,这个座位的座位号会空出来,重新放到销售窗口。

LinkedList 和我们小学初中刚入学上体育课时的排队一样。从高到低,站一个四方队列出来。排好队之后,老师会告诉你,记住身边的人。和LinkedList原理一模一样。
作者: 一路向东    时间: 2015-11-29 19:30
各种线性表的性能分析
      Java提供的List就是一个线性表接口,而ArrayList、LinkedList又是线性表的两种典型实现:基于数组的线性表和基于链的线性表。Queue代表了队列,Deque代表了双端队列(既可以作为队列使用,又可以作为栈使用)。初学者可以无须理会ArrayList和LinkedList之间的性能差异,只需要知道LinkedList集合不仅提供了list的功能,还提供了双端队列、栈的功能就行。但是对于一个成熟的java程序员,在一些性能非常敏感的地方,可能需要慎重选择哪个list实现。
    一般来说,由于数组以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能更好,所有的内部以数组作为底层实现的集合在随机访问时性能都比较好,而内部以链表作为底层实现的集合在执行插入,删除操作时由较好的性能,但是总体来说,ArrayList的性能比LinkedList的性能要好,因此大部分时候要首先考虑ArrayList。关于使用list集合有如下建议:
1.如果需要遍历list集合元素,对于ArrayList集合,应该使用随机访问方法(get)来遍历集合元素,这样性能更好;对于LinkedList集合,则应该采用迭代器来遍历集合元素;
2.如果需要经常执行插入、删除操作来改变包含大量数据的list集合的大小,可考虑使用LinkedList集合。使用ArrayList可能需要经常重新分配内部数组的大小,效果可能较差。
3.如果有多个线程需要同时访问list集合中的元素,可以使用Collections将集合包装成线程安全的集合。

作者: 13542010298    时间: 2015-11-29 22:07
我也搞不懂
作者: 袁有福123    时间: 2015-11-29 22:47
看看大家的评论也能学习到东西
作者: 流水落花    时间: 2015-11-29 22:49
说的有道理....
作者: 迷茫不堪的年纪    时间: 2015-11-29 23:53
其实比较简单的, 他们首先都是有序可重复的, 同时LinkedList 在于怎么存怎么取 , 队列的特性, 先进先出
作者: Camwly    时间: 2015-11-30 11:21
评论才是经典啊
作者: kunsongjack    时间: 2015-11-30 22:00
一路向东 发表于 2015-11-29 19:30
各种线性表的性能分析:
      Java提供的List就是一个线性表接口,而ArrayList、LinkedList又是线性表的两 ...

学习了,概述的很好
作者: 13542010298    时间: 2015-12-2 21:43
好东西不错不错
作者: yyt199108    时间: 2015-12-3 23:49
查询多用ArrayList,速度快,增删多用LinkedList,速度快




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2