您的位置:首页 > 其它

ArrayList和LinkedList的增删改查效率的区别?

2020-07-19 04:18 246 查看

Arraylist的底层是动态数组,增加是通过一个一个遍历后为null这才会增加,删除是通过后一个覆盖前面要删除的那一下标的方式,一直持续到最后才行,这样就十分的浪费时间。所以ArrayList适合做改,查的工作。
LinkedList的底层是双向链表的结构,看LinkedList的双向链表结构导致查询修改比较慢,但是新增和删除的话效率是比较高的,因为只涉及到指向节点的指针的改变,找到相应的节点之后进行替换设置好指针的前后指向地址,不需要像ArrayList那样需要对数组位置的变动。所有LinkedList适合增,删的工作。

为什么说链表结构的LinkedList是相对有序存储的?
举一个场景来说明上面的有序核心实现方法,比如说有这么一个场景: 一个班有 1号小明同学 2号张三 3号小红 4号李四同学,老师要知道学生进入教师的先后顺序。老师在黑板上写了 两个词 head,tail两个字段 规定:

1.第一个来的在 head来的在head、tail写上自己的名字

2.第二个及后续到的, 看到黑板上的tail字段后,找到这个同学(这个同学记住我之后到的 after) 通知自己到了(并记住在我之前的是这个同学before) 并修改tail字段为自己的名字

例子:

1.小明同学 第一个到 ,在黑板上 head,tail 都写下 小明

2.张三到了之后看到 tail是小明 记住 自己上一个(before)是小明 ,并修改tail为张三 ,通知小明,小明记下来自己的后面(afte)r是张三

3小红到了看到tail是张三 记住自己上一个(before)是张三 并修改tail为小红,通知张三,张三记下来自己的后面(after)是小红

4李四到了。。。。。。。

老师来了上课 看到head上写的是小明 并询问 小明 你后面是谁 , 小明回:小红 再询问 小红 …知道 询问到李四 结束

老师就知道了学生进入教室的顺序 小明->张三->小红->李四。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: