A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨雯雯 中级黑马   /  2012-12-20 13:50  /  2304 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨雯雯 于 2012-12-24 14:42 编辑

插入数据时,ArrayList、LinkedList 谁速度较快?还有,它们插入数据的原理是什么?麻烦将的通俗易懂一点

点评

JDK的源码很给力的哦!认真看下你会明白很多东西!  发表于 2012-12-20 21:51

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 建议去看下JDK的源码!继续加油!.

查看全部评分

11 个回复

倒序浏览
ArrayList:查表速度快,因为它的底层是数组结构
LinkedList :增删速度快,因为它的底层是链表结构
用法就是:看你用来是查看呢!还是增删!适当根据需求了

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 言简意赅

查看全部评分

回复 使用道具 举报
ArrayList底层数据使用的是数组结构,可变数组延长是50%,
回复 使用道具 举报
ArrayList使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢;
而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快;

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
ArrayList底层数据使用的是数组结构,可变数组延长是50%,特点是:查询快,增删稍慢,线程不同步。
LinkedList底层使用的是链表数据结构,特点是:增删速度块,查询稍慢。
在毕老师的视频讲解里面他画出来数组结构和链表结构的表现形式,你可以仔细看一下。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
如果有那么两全其美的方法的话ArrayList和LinkedList早就没人用了。

如果你的数据量小的话,比如数量不到几十万的话,根本就不用考虑性能问题,用起来没有任何区别。

特别大的数据量可以考虑用一个装着多个ArrayList的LinkedList,插入的时候只需要插入到一个比较小的ArrayList里,遍历的时候大部分时间都在分别的ArrayList里进行。

另一个叫作图书馆的方法是在生成ArrayList的时候预先留好一些空位以便以后插入,就好比图书馆的书架不总是满的一样。

如果你的数据没有顺序的话可以用ArrayList快速插入删除。首先因为没有顺序所以插入可以直接插到最后。而删除的时候把最后一个东西和要删除的东西对调,然后删除最后一个东西。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您好,插入数据的时候是LinkedList比较快。
解释:ArrayList是底层是数组,数组你明白的,查找很快,因为有索引啊,但是你要改动的话就很麻烦,也是因为索引。因为在堆区分配好的值与索引是在一起,他们是一体的。一个数组是大家都在一起
但是LinkedList底层是链表,链表就是在堆内存中有自己的空间,自己的空间的话那你想换的话就简单多了
回复 使用道具 举报
您好,插入数据的时候是LinkedList比较快。
解释:ArrayList是底层是数组,数组你明白的,查找很快,因为有索引啊,但是你要改动的话就很麻烦,也是因为索引。因为在堆区分配好的值与索引是在一起,他们是一体的。一个数组是大家都在一起
但是LinkedList底层是链表,链表就是在堆内存中有自己的空间,自己的空间的话那你想换的话就简单多了
回复 使用道具 举报
数组的比方:就是大家都在一个教室里的学生。学生就是数组里的数据,而所有的学生都在一个教室里,这是ArrayList
但是在这个楼里,一个学生一个教室的话那就是LinkedList。明白了吧?

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
王小聪 发表于 2012-12-20 18:17
数组的比方:就是大家都在一个教室里的学生。学生就是数组里的数据,而所有的学生都在一个教室里,这是Arra ...

你的回答很形象,明白了,谢谢
回复 使用道具 举报
清水 中级黑马 2012-12-21 19:35:44
11#
拿排队来打比方:
ArrayList就是,队伍中的每一个人都拿着一个有编了号的条子。叫到几号,几号出来(调用)。
但如过有人(A)要插入队伍中间,那么编号条子要加一个,给队伍最后面的人,队伍最后面的人把他原来的号给前面的一个人,以此类推,直到那个人想要插入的位置,原来在那个位置的人把他自己的号码给A
删除的时候你可以以理解。
如果B不排队了。要出来,那么,他把自己的编号条子给自己后面的人,后面的人再把自己的条子给在自己后面的人,以此类推,最后一个人拿到新的编号条子之后把自己的编号条子丢掉。

LinkedList
而链表就是排队的时候,没有条子,但大家都知道自己前面是谁(除了第一个人),并记住,如果你要插进去,就告诉你想插入的那的人,现在我在你前面了,你要记住我,同时你也要把原来在他前面的那个人记住,作为你前面的人。
如果你要离开队伍,就告诉你后面的人,现在你前面的人是在我前面的那个人,我走了。

这样的话,你就开一理解ArrayList和LinkedList的区别了。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
ArrayList底层数据结构是数组,这个查询很快,有索引
LinkedList 底层数据结构是链表,增删很快的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马