LinkedList源码分析(一)

举报
知识浅谈 发表于 2022/10/07 09:10:50 2022/10/07
【摘要】 LinkedList源码分析(一)

在这里插入图片描述

🍁 作者:知识浅谈,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©这个函数,我们接着看。

🍮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源码变量和部分函数的总结,希望有所帮助。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。