LinkedList详解(源码分析)

链表这门内功大致分为三个层次:

第一层叫做“单向链表”,仅有一个后指针,指向下一个数据。

第二层叫做“双向链表”,有两个指针,后指针指向下一个数据,前指针指向上一个数据。

第三层叫做“二叉树”,把后指针去掉,换成左右指针。

01、LinkedList的内心功法(基本结构)

    //链表中的节点类
    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;
        }
    }

由三部分组成:

节点的元素

下一个节点

上一个节点

对于第一个节点来说,prev为null。

对于最后一个节点来说,next为null。

其余节点是prev指向前一个,next指向后一个。

对这个基本的,一定要牢记于心。

02、LinkedList 增删改查

使用之前初始化。

LinkedList<String> list = new LinkedList();

LinkedList并不需要指定大小,因为我没有大小(hhh),内存多大我多大。

1)add()方法插入元素:

list.add("董李阳1");
list.add("董李阳2");
list.add("董李阳3");

add()方法内部源码:(其实是调用LinkLast方法)

    public boolean add(E e) {
        linkLast(e); //在列表尾部添加元素
        return true; //成功返回true
    }

linkLat,顾名思义,就是链表尾部添加:

    /**
     * Links e as last element.
     * 在列表的尾部添加指定的元素
     */
    void linkLast(E e) {
        final Node<E> l = last; //获取链表的最后一个节点
        final Node<E> newNode = new Node<>(l, e, null); //创建一个新节点,并将其设置为链表的最后一个节点
        last = n
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值