LinkedList
- LinkedList
- 使用分析
- 优点
- 性能上:基于双向链表插入和删除操效率比Arraylist高
- 实际插入和删除还是需要移动指针所以实际时间复杂度O(n)
- 内存上:不需要连续的内存空间
- 性能上:基于双向链表插入和删除操效率比Arraylist高
- 缺点
- 性能上:
- 实际插入和删除还是需要移动指针所以实际时间复杂度O(n)
- 随机访问效率较低,时间复杂度为 O(n)
- 内存上:每个节点要额外存储两个指针浪费空间
- 线程不安全
- 性能上:
- 适用场景:用于栈和队列的实现,频繁插入和删除的场景,或者没有连续内存的场景。
- 优点
- 设计分析
- 设计目标
- 单线程下高效增删的List
- 设计思路
- 基于双向链表,提高增删效率
- 实现原理
- 基于双向链表,通过最近的一端开始移动指针,提高增删效率
- 设计目标
- 源码分析
- 继承关系
- 重要属性
- 异常
- 链表没有元素时获取元素会出现 NoSuchElementException
- Node结构
- linkLast方法
- linkBefore方法
- get(int index)
- boolean remove(Object o)
- E unlink(Node<E> x)
- 插入的元素值可以为null
- 快速失败机制fail- fast
- 在增加删除操作时modcount增加
- 在获取迭代器遍历时,迭代器保存了ArrayList当前modcoun值,在迭代器每次执行next时先比较保存的modcoun和ArrayList当前的modcoun不同时,抛出异常ConcurrentModificationException
- https://www.cnblogs.com/ldq2016/p/18751225
- 迭代器是双向迭代器
- 双向链表在做增加和删除时,要考虑在队首和队尾增加要调整last和first属性情况 和删除队首和队尾部要调整last和first属性情况
- 判断节点是否是队首和队尾队条件
- 如果当前节点的pre为null,认为当前节点为队首
- 如果当前节点的next为null,认为当前节点为队尾
- https://javaguide.cn/java/collection/linkedlist-source-code.html
- 使用分析
作者: 一点点征服
出处:http://www.cnblogs.com/ldq2016/
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利