LinkedList

  • LinkedList
    • 使用分析
      • 优点
        • 性能上:基于双向链表插入和删除操效率比Arraylist高
          • 实际插入和删除还是需要移动指针所以实际时间复杂度O(n)
        • 内存上:不需要连续的内存空间
      • 缺点
        • 性能上:
          • 实际插入和删除还是需要移动指针所以实际时间复杂度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
posted @ 2025-04-21 09:48  一点点征服  阅读(17)  评论(0)    收藏  举报