中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java源碼解析LinkedList

發布時間:2020-09-23 18:06:40 來源:腳本之家 閱讀:197 作者:李燦輝 欄目:編程語言

本文基于jdk1.8進行分析。

LinkedList和ArrayList都是常用的java集合。ArrayList是數組,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;
    }
  }

成員變量如下。它有頭節點和尾節點2個指針。

  transient int size = 0;
  /**
   * Pointer to first node.
   * Invariant: (first == null && last == null) ||
   *      (first.prev == null && first.item != null)
   **/
  transient Node<E> first;
  /**
   * Pointer to last node.
   * Invariant: (first == null && last == null) ||
   *      (last.next == null && last.item != null)
   **/
  transient Node<E> last;

下面看一下主要方法。首先是get方法。如下圖。鏈表的get方法效率很低,這一點需要注意,也就是說,我們可以用for循環get(i)的方式去遍歷ArrayList,但千萬不要這樣去遍歷Linkedlist。因為Linkedlist進行get時,需要把從頭結點或尾節點一個一個的找到第i個元素,效率很低。遍歷LinkedList時應該使用foreach方式。

  /**
   * Returns the element at the specified position in this list.
   * @param index index of the element to return
   * @return the element at the specified position in this list
   * @throws IndexOutOfBoundsException {@inheritDoc}
   **/
  public E get(int index) {
    checkElementIndex(index);
    return node(index).item;
  }
  /**
   * Returns the (non-null) Node at the specified element index.
   **/
  Node<E> node(int index) {
    // assert isElementIndex(index);
    if (index < (size >> 1)) {
      Node<E> x = first;
      for (int i = 0; i < index; i++)
        x = x.next;
      return x;
    } else {
      Node<E> x = last;
      for (int i = size - 1; i > index; i--)
        x = x.prev;
      return x;
    }
  }

下面是add方法,add方法把待添加的元素添加到鏈表末尾即可。

  /**
   * Appends the specified element to the end of this list.
   * <p>This method is equivalent to {@link #addLast}.
   * @param e element to be appended to this list
   * @return {@code true} (as specified by {@link Collection#add})
   **/
  public boolean add(E e) {
    linkLast(e);
    return true;
  }
  /**
   * Links e as last element.
   **/
  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++;
  }

This is the end。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

收藏| 宁乡县| 温泉县| 辽中县| 寿光市| 冀州市| 沛县| 天门市| 万年县| 永泰县| 东台市| 繁昌县| 阿合奇县| 玛沁县| 广水市| 视频| 永兴县| 新昌县| 阆中市| 宁德市| 和田县| 龙岩市| 东方市| 伊川县| 乡城县| 宁夏| 南投市| 浦江县| 谢通门县| 肇源县| 佳木斯市| 资阳市| 平罗县| 和田市| 水富县| 江达县| 武山县| 墨脱县| 靖西县| 岳西县| 乌拉特前旗|