【Java集合】LinkedList源码理解笔记

该博客介绍了Java中双向链表的实现。通过内部类Node节点存储数据及前后节点形成链表,用first和last存储首尾节点。还阐述了栈和队列操作方法,如push、pop、offer等,对比了队列与list方法,且有序列化与反序列化方法。总结指出双向链表比ArrayList更易插入与删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.内部类Node节点,item存储数据内容,next、prev存储前后节点,形成链表。

private static class Node<E> {
    E item;
    Node<E> next;
    Node<E> prev;

    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}

2.first、last属性字段存储开始节点和结束节点。

/**
 * Pointer to first node.
 * Invariant: (first == null && last == null) ||
 *            (first.prev == null && first.item != null)
 */
transient Node<E> first;

/**
 * Pointer to last node.
 * Invariant: (first == null && last == null) ||
 *            (last.next == null && last.item != null)
 */
transient Node<E> last;

3.push(E e)将链表当成栈使用,在链表第一个元素前添加新元素,入栈;E pop()返回第一个元素,出栈,当没有元素时会抛异常。


4.offer(E e) peek() poll()等queue队列方法与list方法的对比,主要一点是队列不会抛出异常,而是返回null

方法作用原有返回值队列返回值对比
添加元素add(E e)成功返回trueoffer(E e)成功返回true直接调用前者
添加元素addFirst(E e)offerFirst(E e)成功返回true直接调用前者,加返回值
添加元素addLast(E e)offerLast(E e)成功返回true直接调用前者,加返回值
返回首元素E peek()没有元素返回null
返回首元素E element()没有元素抛出异常
返回首元素E peekFirst()没有元素返回null
返回尾元素E peekLast()没有元素返回null
删除首元素E remove()返回被删除的元素,没有元素抛出异常E poll()返回被删除的元素,没有元素返回null
删除首元素E removeFirst()返回被删除的元素,没有元素抛出异常E pollFirst()返回被删除的元素,没有元素返回null
删除尾元素E removeLast()返回被删除的元素,没有元素抛出异常E pollLast()返回被删除的元素,没有元素返回null
删除尾元素E removeLast()返回被删除的元素,没有元素抛出异常E pollLast()返回被删除的元素,没有元素返回null

5.有序列化与反序列化writeObject、readObject方法


总结:双向链表,相较于ArrayList易于插入与删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值