容器-ListedList头尾添加元素源码分析(八)

容器-ListedList头尾添加元素源码分析(八)

  1. 先进入addFirst的源代码

    System.out.println("------------LinkedList----------");
            LinkedList<String> linkedList=new LinkedList<>();
            //返回列表的第一个元素(每次的元素,都加在向第一个元素的前面),就是c+b+a
            linkedList.addFirst("a");
            linkedList.addFirst("b");
            linkedList.addFirst("c");
            for (String str:linkedList){
          
          
                System.out.println(str);//打印出来的顺序就是:c b a
            }
    
  2. addFirst的方法实现,

    /**
         * Inserts the specified element at the beginning of this list.
         *
         * @param e the element to add
         */
    public void addFirst(E e) {
          
          
        linkFirst(e);
    }
    
  3. 进入linkFirst看他是怎么实现的

     /**
         * Links e as first element.
         */
        private void linkFirst(E e) {
          
          
            final Node<E> f = first;//定义是没有初始化, f = first=null
            final Node<E> newNode = new Node<>(null, e, f);//注意这个prev=null,元素是e,next=f=null
            first = newNode;//假设创建一个新节点1111
            if (f == null)//满足条件last=newnode=1111,也就是第一次满足,现在first=1111,last=1111,也就是指向的是本身创建的新节点
                last = newNode;
            else//第二次添加元素开始,都是不满足条件的,都走else
                f.prev = newNode;
            size++;//然后每次size都++
            modCount++;
        }
    
  4. linkFirst的过程原理图

在这里插入图片描述

  1. 要结合节点类分析

    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;//在这里,这个很重要,就是f=1111,然后当前新节点2222会指向下一个节点1111
            this.prev = prev;
        }
    }
    

猜你喜欢

转载自blog.csdn.net/Xun_independent/article/details/114700101
今日推荐