zoukankan      html  css  js  c++  java
  • LinkedList源码解析

    LinkedList是使用双向链表实现的。

    LinkedList有一个内部类存储链表上的每一个结点(Node)的信息。

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

    LinkedList有两个Node属性,存储头尾结点。新建集合时,头尾结点都为null.

    transient int size = 0; //集合的大小
    transient Node<E> first; //头结点
    transient Node<E> last; //尾结点
    

    LinkedList添加元素方法

    添加方法默认的是向集合的尾部添加元素。

    
        public boolean add(E e) {
            linkLast(e);
            return true;
        }
    
        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++;
        }
    

    图示

    --------------- 我每一次回头,都感觉自己不够努力,所以我不再回头。 ---------------
  • 相关阅读:
    C#中创建Android项目
    C#中创建Android项目
    在C#中获取当前屏幕的分辨率的方法
    数据库面试
    计算机网络面试
    linux面试
    Java使用递归检索文件个数
    二分查找
    富途证券面经(一面挂)
    Mysql
  • 原文地址:https://www.cnblogs.com/zjw-blog/p/13780914.html
Copyright © 2011-2022 走看看