黑马程序员技术交流社区

标题: 关于ArrayList和LinkedList的疑惑 [打印本页]

作者: tanshion    时间: 2014-6-10 21:55
标题: 关于ArrayList和LinkedList的疑惑
本帖最后由 tanshion 于 2014-6-12 00:03 编辑

我想知道在元素插入方面,LinkedList究竟比ArrayList有什么优势???
作者: Gaara33    时间: 2014-6-10 22:01
LinkedList和ArrayList储存元素的方式不一样ArrayList中的元素默认的带有角标,比如说ArrayList集合中有100个元素,如果要在第二角标位置插入元素,那么该元素之后的所有元素的角标都需要加1,因此效率会低很多
作者: wojiaojay    时间: 2014-6-10 22:25
LinkedList他的底层是链表结构,所以他的特点是增删快,查找慢,这和ArrayList的特点正好相反,所以元素插入实际上就是增加元素,所以用LinkedList而非ArrayList
作者: cain    时间: 2014-6-10 23:31
学习了啊
作者: liujie445012100    时间: 2014-6-10 23:38
LinkedList他的底层是链表结构,所以他的特点是增删快,查找慢,ArrayList的底层是数组,按角标查询,所以速度比较快,添加和删除慢
作者: felixzr    时间: 2014-6-11 00:11
学习了,表示不是太清楚
作者: 塔罗    时间: 2014-6-11 00:15
都说了。说的很详细
作者: tanshion    时间: 2014-6-11 01:23
谢谢大家了
作者: 不去会死    时间: 2014-6-11 14:26
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引  但是缺点就是查找非常麻烦 要丛第一个索引开始
作者: pengyu    时间: 2014-6-11 14:44
上面说的很清楚呢
作者: 黑子    时间: 2014-6-11 22:45
本帖最后由 黑子 于 2014-6-11 22:49 编辑

LinkedList底层数据结果是链表结构,对象与对象之间有地址指针间的联系,插入、删除只要改变指针就可了,不用改变底层的数组。
ArrayList底层是线性表中的顺序结构,对象与对象之间是一个接着一个的,插入或是删除都要遍历移动对象,开销大,速度慢。但是查询速度快,
LinkedList查询慢,增删快!

作者: 小生    时间: 2014-6-12 12:58

我自己总结了一下:
结合有6个接口和8个实现类,基本特点如下:
6个接口特点:
Collection:定义了存取一组对象的方法,子接口Set和List分别定义了存储方式。
Set:元素没有次序,但是不允许重复。
SortedSet:和Set相同,但是按照升序排列的。
List : 元素加载和移除是按照顺序,允许重复。
Map:以键值对的形式存储,值可以重复,但是键是不允许重复的,无存放顺序。
SortMap:和Map相同,但是集合中的元素按照他们的键值对的升序排列。
8个实现类的特性:
LinkList:删除快,查找慢,故多用于插入和删除。
ArrayList:效率高,不直接支持并发,多用于查询。
Vectory:效率低,线程安全,直接支持并发操作,多用于、查询(先被ArrayList取代)。
TreeSet:存储效率高,查找效率低。
HashSet:存储效率高,查找效率低。
HashMap:元素以键值对的形式保存。效率搞,不支持并行,但是允许空值。
HashTabel:元素以键值对方式保存,线程安全,不允许空制(Key,Value都不允许为空)。
TreeMap:元素以键值对方式保存,不支持并行,不允许空制(Key,Value都不允许为空)




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