91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

田东县| 礼泉县| 扬州市| 长乐市| 兴化市| 诸暨市| 济阳县| 松阳县| 长顺县| 盘锦市| 昭通市| 临西县| 寿宁县| 万山特区| 涿鹿县| 淮北市| 天峨县| 临武县| 临城县| 健康| 周口市| 巫溪县| 巧家县| 城口县| 安仁县| 桦川县| 河曲县| 德惠市| 马公市| 石嘴山市| 正安县| 那坡县| 涟水县| 巴林右旗| 抚顺县| 原平市| 古丈县| 浑源县| 安仁县| 台南市| 新沂市|