为什么Java中数组比链表的查询速度快?

James-Blackhu 2020-08-16 11:02:09
为什么Java中数组比链表的查询速度快?内部的查询机制是什么??拜托大佬们举个栗子来简单指导一下感谢
...全文
6492 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kris2088 2020-08-18
  • 打赏
  • 举报
回复
数组,内存连续,可以通过地址增量获取 链表,内存多数不连续,需要遍历,速度会慢很多 数组结构决定了,数据读取快,写入扩容会很慢,需要搬数据 链表则相反
唐僧爱程序 2020-08-17
  • 打赏
  • 举报
回复
数组的内存单元连续的 查找很快,链表相反
KeepSayingNo 2020-08-17
  • 打赏
  • 举报
回复
数组可以立马找到第几个元素,链表就不行了
sunyiz 2020-08-17
  • 打赏
  • 举报
回复 2
在一楼的例子基础上细化一下: 1、数组中查询: 10个人排成一排,身上都贴好了编号(比如1~10), 你点名喊:“4号”,4号立刻就会站出来, 喊:“8号”,8号立刻就会站出来, 因为大家身上都有编号,知道哪个号对应哪个人 2、链表中查询: 10个人手拉手站成一排,但是没有编号,每个人只知道自己的前一个人和后一个人是谁 你点名喊:“4号”,会从第一个人开始依次报数:“1”、“2”、“3”、“4”, 报到“4”的人才会知道自己是4号,才能站出来 所以,按指定位置查询时链表会比数据慢一些 —————————————————————————————— 但是链表的插入/删除效率要高于数组: 1、数组中插入: 10个人排成一排,身上都贴好了编号(比如1~10) 你现在想让一个人插入进入,排在 3 的位置 此时需要做什么呢?需要从3号开始,把每个人身上的编号撕下来, “3号”编号牌交给新来的,“4号”编号牌交给原来的“3号”…… 依次直到最后一个人,还要给他做一个新的编号牌:“11号” 2、链表中插入: 10个人手拉手站成一排,但是没有编号,每个人只知道自己的前一个人和后一个人是谁 你现在想让一个人插入进入,排在 3 的位置 此时开始报数,报到“3”的人和前一个人(“2”)松开手, 然后新来的人站进去和原来的“2”位置“3”位置的人拉上手,这三人再看一眼记住自己前后的人是谁, OK 链表的插入过程显然比数组中插入要简便的多
James-Blackhu 2020-08-17
  • 打赏
  • 举报
回复
数组和链表增删问题:是不是可以理解为--->增加一个,数组必须一个个遍历(导致增加变慢),增加在最后,删除的时候如果删除了中间的其他的一个一个需要往前面移动,所以速度慢。 链表增加就相当于随便搬了台机子放在机房,不管位置??删除的是后,直接搬走想要搬走的那台机子就可以了??
Mr_布鲁斯 2020-08-17
  • 打赏
  • 举报
回复
数组结构在堆内存中存放的位置是连续的,链表结构位置则是分散的,通过指针来指向下一个数据节点的位置。当进行查询操作时,数组结构中可以根据下标直接获取某数据节点的地址,而链表结构需要通过遍历每个节点来获取需要查询的数据节点的位置。 例如:某机房内,十台机器编号1-10按顺序排成一排,想找第5台找起来很方便;十台机器编号并且分散在机房的不同位置,就需要一台一台去遍历,直到找到第5台
明白畅达 2020-08-16
  • 打赏
  • 举报
回复
数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号(下标)很快就能找到。增删慢 链表就像手牵着手站成一圈的人,要找第10个人不容易,必须从第一个人一个个数过去。增删快

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧