写点什么

LinkedList 源码分析(一)

作者:知识浅谈
  • 2022 年 10 月 08 日
    吉林
  • 本文字数:1034 字

    阅读完需:约 3 分钟


🍁 作者:知识浅谈,CSDN 博客专家,阿里云签约博主,InfoQ 签约博主,华为云云享专家

📌 擅长领域:全栈工程师、爬虫、ACM 算法

💒 公众号:知识浅谈


LinkedList 源码分析(一)解读总结


正菜来了⛳⛳⛳

🎈LinkedList 类的实现

针对类:LinkedList 是实现的 AbstractSequentialList 抽象类针对接口:LinkedList 实现的是 List,Deque 等接口。

🎈LinkedList 成员变量

🍮transient int size = 0

含义: 这个代表的是 LinkedList 中元素的个数,用 transient 修饰表示 size 这个变量不能被序列化。

🍮transient Node<E> first;

含义: Pointer to first node. Invariant,这个表示 first 为一个不变量,指向链表中的第一个节点。

🍮 transient Node<E> last;

含义: Pointer to lastnode. Invariant,这个表示 last 为一个不变量,指向链表中的最后的一个节点。

🍮 LinkedList()

含义: 这个表示的是无参构造函数。


public LinkedList() {}
复制代码

🍮LinkedList(Collection<? extends E> c)

含义: 这个表示的是有参构造函数,并且把集合 c 中的元素添加到 linkedlist 中去。


public LinkedList(Collection<? extends E> c) {    this();    addAll(c);}
复制代码


从上边的方法中可以看出来是调用了 addAll(c)这个函数,我们接着看。

🍮linkFirst(E e)

含义:这个函数表示的是把 e 作为 linkedlist 的第一个元素。


private void linkFirst(E e) {    final Node<E> f = first;    final Node<E> newNode = new Node<>(null, e, f);    first = newNode;    if (f == null)        last = newNode;    else        f.prev = newNode;    size++;    modCount++;}
复制代码


从上述函数中可以看出,会先创建一个 Node 节点存储 e 元素,然后判断 list 是不是空的,如果是空的,把 last 指向新创建的节点,不为空的话,把原来 first 的节点的前驱节点指向新创建的第一个节点。

🍮linkLast(E e)

含义:这个函数表示的是把 e 作为 linkedlist 的最后一个元素。


    void linkLast(E e) {        final Node<E> l = last;        final Node<E> newNode = new Node<>(l, e, null);        last = newNode;        if (l == null)            first = newNode;        else            l.next = newNode;        size++;        modCount++;    }
复制代码


从上述函数中可以看出,会先创建一个 Node 节点存储 e 元素,然后判断 list 是不是空的,如果是空的,把 first 指向新创建的节点,不为空的话,把原来 last 的节点的后驱节点指向新创建的第一个节点。

🍚总结

以上是关于 LinkedList 源码变量和部分函数的总结,希望有所帮助。

发布于: 刚刚阅读数: 3
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

🍁 作者:知识浅谈,InfoQ签约作者,CSDN博客专家/签约讲师,华为云云享专家,阿里云签约博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
LinkedList源码分析(一)_linkedlist_知识浅谈_InfoQ写作社区