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

    LinkedList源码分析

    LinkedList的成员变量源码

    public class LinkedList<E> extends AbstractSequentialList<E>
     implements List<E>, Deque<E>, Cloneable,
    java.io.Serializable{
      transient int size = 0;
      /**
      *存储第一个节点的引用
      */
      transient Node<E> first;
      /**
      * 存储最后一个节点的引用
      */
      transient Node<E> last;
     
      //......
      //......
    }

    LinkedList的内部类Node类源码

    public class LinkedList<E> extends AbstractSequentialList<E>
     implements List<E>, Deque<E>, Cloneable,
    java.io.Serializable{
      //......
      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的add()方法源码

    public boolean add(E e) {
    linkLast(e);//调用linkLast()方法
    return true;//永远返回true
    }
    void linkLast(E e) {
      final Node<E> l = last;//一个临时变量,存储最后一个节点
      final Node<E> newNode = new Node<>(l, e, null);//创建一个Node对象
    LinkedList的get()方法
    HashSet的源码分析
    HashSet的成员属性及构造方法
      last = newNode;//将新Node对象存储到last
      if (l == null)//如果没有最后一个元素,说明当前是第一个节点
     first = newNode;//将新节点存为第一个节点
      else
     l.next = newNode;//否则不是第一个节点,就赋值到当前的last的next成员
      size++;//总数量 + 1
      modCount++;//
    }

    LinkedList的get()方法

    public E get(int index) {
      checkElementIndex(index);//检查索引的合法性(必须在0-size之间),如果不合法,此方法抛
    出异常
      return node(index).item;
    }
    Node<E> node(int index) {//此方法接收一个索引,返回一个Node
        // assert isElementIndex(index);
        if (index < (size >> 1)) {//判断要查找的index是否小于size / 2,二分法查找
          Node<E> x = first;// x = 第一个节点——从前往后找
          for (int i = 0; i < index; i++)//从0开始,条件:i < index,此循环只控制次
    数
            x = x.next;//每次 x = 当前节点.next;
          return x;//循环完毕,x就是index索引的节点。
       } else {
          Node<E> x = last;// x = 最后一个节点——从后往前找
          for (int i = size - 1; i > index; i--)//从最后位置开始,条件:i > index
            x = x.prev;//每次 x = 当前节点.prev;
          return x;//循环完毕,x就是index索引的节点
       }
     }
  • 相关阅读:
    第二十一章流 1流的操作 简单
    第二十章友元类与嵌套类 1友元类 简单
    第十九章 19 利用私有继承来实现代码重用 简单
    第二十章友元类与嵌套类 2嵌套类 简单
    第十九章 8链表类Node 简单
    第二十一章流 3用cin输入 简单
    第十九章 10 图书 药品管理系统 简单
    第十九章 11图书 药品管理系统 简单
    第二十一章流 4文件的输入和输出 简单
    第十九章 12 什么时候使用私有继承,什么时候使用包含 简单
  • 原文地址:https://www.cnblogs.com/chenfx/p/13365369.html
Copyright © 2011-2022 走看看