写点什么

LinkedList 源码分析(二)

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

    阅读完需:约 6 分钟


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

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

💒 公众号:知识浅谈


LinkedList 源码分析(二)总结


正菜来了⛳⛳⛳

🎈LinkedList 中相关方法

🍮linkBefore(E e, Node<E> succ)

含义:这个函数对应的意思是在指定的节点 succ 之前插入 e 这个元素,从下边的函数中可以看出先欸 pred 赋值 succ 的前驱节点,然后创建一个新的节点,并指定前和后节点信息,并且如果 succ 原来是 first 节点,需要更新 first 指向新的 e 这个节点。


void linkBefore(E e, Node<E> succ) {    // assert succ != null;    final Node<E> pred = succ.prev;    final Node<E> newNode = new Node<>(pred, e, succ);    succ.prev = newNode;    if (pred == null)        first = newNode;    else        pred.next = newNode;    size++;    modCount++;}
复制代码

🍮E unlinkFirst(Node<E> f)

含义:取消非空第一个节点 f 的链接,把 f 节点删除,并把 first 指向 f 节点的下一个节点。


private E unlinkFirst(Node<E> f) {    // assert f == first && f != null;    final E element = f.item;    final Node<E> next = f.next;    f.item = null;    f.next = null; // help GC    first = next;    if (next == null)        last = null;    else        next.prev = null;    size--;    modCount++;    return element;}
复制代码

🍮E unlinkLast(Node<E> l)

含义:取消非空的最后一个节点 l 的链接,把 l 节点删除,并把 l 前一个节点的 next 指向为 null。


private E unlinkLast(Node<E> l) {        // assert l == last && l != null;        final E element = l.item;        final Node<E> prev = l.prev;        l.item = null;        l.prev = null; // help GC        last = prev;        if (prev == null)            first = null;        else            prev.next = null;        size--;        modCount++;        return element;    }
复制代码

🍮E unlink(Node<E> x)

含义:取消一个非空节点的链接,即把当前节点的前一个节点指向后一个节点,并返回当前节点的值。


E unlink(Node<E> x) {        // assert x != null;        final E element = x.item;        final Node<E> next = x.next;        final Node<E> prev = x.prev;
if (prev == null) { first = next; } else { prev.next = next; x.prev = null; }
if (next == null) { last = prev; } else { next.prev = prev; x.next = null; }
x.item = null; size--; modCount++; return element; }
复制代码

🍮E getFirst()

含义:返回 LinkedList 链表中的第一个元素。


public E getFirst() {    final Node<E> f = first;    if (f == null)        throw new NoSuchElementException();    return f.item;}
复制代码

🍮E getLast()

含义:返回 LinkedList 链表中的最后一个元素。


 public E getLast() {        final Node<E> l = last;        if (l == null)            throw new NoSuchElementException();        return l.item;    }
复制代码

🍮E removeFirst()

含义:移除 LinkedList 链表中的第一个元素。


public E removeFirst() {    final Node<E> f = first;    if (f == null)        throw new NoSuchElementException();    return unlinkFirst(f);}
复制代码


上边的函数中调用了 unlinkFirst(f) 这个函数就是上边我们说到的把 f 这个头节点的元素删除,first 指向 f.next 元素。

🍮E removeLast()

含义:移除 LinkedList 链表中的最后一个元素。


    public E removeLast() {        final Node<E> l = last;        if (l == null)            throw new NoSuchElementException();        return unlinkLast(l);    }
复制代码


上边的函数中调用了 removeLast(f) 这个函数就是上边我们说到的把 f 这个尾节点的元素删除,last 指向 last.prev 元素。

🍮void addFirst(E e)

含义:在 linkedList 中的头节点处添加一个 e 节点。


public void addFirst(E e) {        linkFirst(e);    }
复制代码

🍮void addLast(E e)

含义:在 linkedList 中的尾节点处添加一个 e 节点。


public void addLast(E e) {        linkLast(e);    }
复制代码

🍚总结

以上为 LinkedList 的部分源码的总结,希望有所帮助。

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

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

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

评论

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