LinkedList底层实现,及其数据结构实现。

LinkedList底层的实现基于双向表

prevdatanext

 

next指向下一个node的地址。prev指向上一个node。

 

这里的代码是LinkedList类的源码。

 private static class Node<E> {
    //业务数据 E item;
    //指向下个node Node
<E> next;
    //指向上个node Node
<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }

 

那么当我们是用list.add(e);方法时会添加到这个链表的末位

public boolean add(E e) {
        linkLast(e);
        return true;
    }

 那么链表的首尾node的prev和next,看实现代码

也就是说,firstnode的prev和lastNode的next为null

private void linkFirst(E e) {
        //这里首先获得firstNode
        final Node<E> f = first;
        //这里的新的Node
        final Node<E> newNode = new Node<>(null, e, f);
        //此node成为新的firstNode
        first = newNode;
        //如果原来firstNode为空的话,说明这个list为空,那么这时FirstNode也就是lastNode,这个链表只有一个node
        if (f == null)
            last = newNode;
        else
            f.prev = newNode;
        size++;
        modCount++;
    }

    /**
     * Links e as last element.代码解释如上。
     */
    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++;
    }    

 

转载于:https://www.cnblogs.com/bingscode/p/6149054.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值