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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 帅哥哥 高级黑马   /  2014-6-6 16:28  /  7782 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 帅哥哥 于 2014-6-7 13:39 编辑

都说ArrayList的查询速度快,原因是底层是数组数据结构,有角标
LinkedList底层是链表数据结构,
可是LinkedList也实现了List接口,也是有角标的啊,为什么就说ArrayList比LinkedList的查询速度快呢?

10 个回复

倒序浏览
想明白了…………最近怎么问问题后还得自己想啊,大神都哪里去了…………
都有键是没错,可是查询速度和键没有直接关系,键的存在只是逻辑上方便了程序员操作,查询速度和数据结构才有直接关系,因为数据结构和底层有直接关系,查询是在遍历内存空间。
数组数据结构是一片连续的内存,头的地址是知道的,角标可以直接看做是偏移量,所以可以直接锁定要找的那片内存。
链表数据结构在内存中“乱七八糟”,即使知道了角标,还是得从头一个一个的往下查,所以效率直接就低了。
我想应该是这样吧…………
回复 使用道具 举报 1 0
期待大神回答!
回复 使用道具 举报 1 0
链表结构 查询数据的时候,只能从第一个开始查询,然后通过第一个元素的next得到下个元素判断是否符合要求,如果不符合,继续next得到下一个元素,移动指针的过程非常消耗时间,所以慢。你看看这两个类的底层实现,很清楚。话说,LinkedList实现list接口和角标什么关系?
回复 使用道具 举报
jdk源文件中
ArrayList类中有个elementData[]的数组字段
LinkedList类是由一Node<E> first,Node<E> last这两个字段控制的一个链表
存放在Collection<Node<E>>中
回复 使用道具 举报 0 1
ArrayList将对象存放在数组中,是连续的空间,LinkedList将对象存放在链表中,是不连续的空间
回复 使用道具 举报
我来学习了!!!!!!!!!!!!!
回复 使用道具 举报
LinkedList底层是链表结构,是通过指针相连的,但位置不连续,需从第一个元素开始,向后查询。而数组结构是相连的,通过角标可直接查询出其相应值。
回复 使用道具 举报
链表查询的话要从第一个开始查,一直到你需要的那个,ArrayList,底层是用数组实现,可以直接通过索引查,所有ArrayList查询快
回复 使用道具 举报
因为LinkedList是链表类型的 所以查询只能是重开头进行查询   LinkedList所谓的角标只是指向下一个元素,进行连接用的。
回复 使用道具 举报
ArrayList的底层为数组,按下标查找根本不要比较,所以查询快,但其增删慢,LinkedList底层为链表按下标查找要比较,所以查询慢,但其增删快
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马