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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡乃锋 中级黑马   /  2013-11-20 10:55  /  1346 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

他俩具体有啥区别啊,各自存储什么样的数据能展现各自的性能特点,说LinkedList是双向链表,双向链表存储优势在哪里啊

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 好好看视频,里面有讲,下不为例.

查看全部评分

3 个回复

倒序浏览
rrayList
ArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变。这样就带来以下有缺点:
快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。
向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。
操作其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组需要移动所有后面的对象。

LinkedList
LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可,当删除记录时也一样。这样就带来以下有缺点:
操作其中对象的速度快 只需要改变连接,新的节点可以在内存中的任何地方
不能随即访问 虽然存在get()方法,但是这个方法是通过遍历接点来定位的所以速度慢

ArrayList:
本质上是使用数组存储的,所以是使用一段连续的存储单元依次存放所有的元素。
LinkedList:
是基于链表的,采用链式存储结构,用一组任意的存储单元存放所有元素。

ArrayList:
查找:O(1)
插入和删除:需要平均移动表长一半的元素,时间为O(n)。
LinkedList:
查找:O(n)
插入和删除:在指出需要插入或删除的结点的位置的情况下,时间为O(1)。

ArrayList:
需要预分配存储空间,当空间不足时,动态的增长。
LinkedList:
不需要分配存储空间,只需创建一个头结点header,随时根据需要把内存空间链接起来。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 认真答题比刷帖好多了

查看全部评分

回复 使用道具 举报
表示建议楼主仔细看下视频,老毕的视频里面有几个图画的非常好的,一目了然。。。2楼正解。。这个涉及到了数据结构,先把需要的学好。主次分明,以后有兴趣在弄。。。
回复 使用道具 举报
|--->ArrayList(JDK1.2):底层的数据结构是数组数据结构,特点是查询速度快(因为带角标),
         但是增删速度稍慢,因为当元素多时,增删一个元素则所有元素的角标都得改变
         线程不同步。默认长度是10,当超过长度时,按50%延长集合长度。      
|--->LinkedList(JDK1.2):底层数据结构式链表数据结构(即后面一个元素记录前一个),
          特点:查询速度慢,因为每个元素只知道前面一个元素,但增删速度快
          因为元素再多,增删一个,只要让其前后的元素重新相连即可
          线程是不同步的。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马