Container-ListedList add element source code analysis (8)

Container-ListedList add element source code analysis (8)

  1. First enter the source code of 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. The method of addFirst is implemented,

    /**
         * Inserts the specified element at the beginning of this list.
         *
         * @param e the element to add
         */
    public void addFirst(E e) {
          
          
        linkFirst(e);
    }
    
  3. Enter linkFirst to see how he achieved it

     /**
         * 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. Schematic diagram of linkFirst process

Insert picture description here

  1. To combine node class analysis

    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;
        }
    }
    

Guess you like

Origin blog.csdn.net/Xun_independent/article/details/114700101