亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

苍山县| 大荔县| 深泽县| 沁水县| 五常市| 革吉县| 鹤山市| 长治县| 边坝县| 南和县| 牡丹江市| 隆回县| 甘泉县| 东乡县| 怀柔区| 洪湖市| 九寨沟县| 固原市| 项城市| 忻城县| 巩义市| 焦作市| 达州市| 七台河市| 兰州市| 张家界市| 平舆县| 陆河县| 沿河| 和林格尔县| 宜黄县| 桐柏县| 弋阳县| 获嘉县| 宕昌县| 吉水县| 涞水县| 清水县| 肇源县| 偃师市| 邯郸市|