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

溫馨提示×

溫馨提示×

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

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

Java集合框架LinkedList詳解及實例

發布時間:2020-10-22 23:32:05 來源:腳本之家 閱讀:136 作者:lqh 欄目:編程語言

Java集合框架LinkedList詳解

LinkedList定義

package java.util;
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概述

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

  鏈表無容量限制,但雙向鏈表本身使用了更多空間,也需要額外的鏈表指針操作。

  按下標訪問元素—get(i)/set(i,e) 要悲劇的遍歷鏈表將指針移動到位(如果i>數組大小的一半,會從末尾移起)。

 public E get(int index) {
  checkElementIndex(index);
  return node(index).item;
 }
 public E set(int index, E element) {
  checkElementIndex(index);
  Node<E> x = node(index);
  E oldVal = x.item;
  x.item = element;
  return oldVal;
 }

 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(), addFirst(),removeLast()或用iterator()上的remove()能省掉指針的移動。

  非線程安全,可以調用Collections.synchronizedList(new LinkedList<>());實現。

LinkedList用法

  簡單舉個例子:

  List<Integer> list = new LinkedList<>();
  list.add(4);
  list.add(2);
  list.add(3);
  list.add(5);

  for(int i:list)
   System.out.println(i);
  System.out.println(list);

  運行結果:

4
2
3
5
[4, 2, 3, 5]

  LinkedList會保留插入數據的順序。

subList的使用

 List<Integer> list = new LinkedList<>();
  list.add(4);
  list.add(2);
  list.add(3);
  list.add(5);
  list.add(7);
  list.add(5);
  list.add(11);
  list.add(14);
  list.add(10);
  list.add(9);
  System.out.println(list);
  List<Integer> list2 = list.subList(3, 6);
  System.out.println(list2);
  list2.set(2, 50);

  System.out.println("============");
  System.out.println(list);
  System.out.println(list2);

  運行結果:

[4, 2, 3, 5, 7, 5, 11, 14, 10, 9]
[5, 7, 5]
============
[4, 2, 3, 5, 7, 50, 11, 14, 10, 9]
[5, 7, 50]

  調用LinkedList中的subList方法生成的新的list,內部引用的還是原來的鏈表,如果改變subList中的值,主list中的值也會跟著改變。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

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

AI

襄城县| 玉田县| 阿尔山市| 平潭县| 梁平县| 华亭县| 北宁市| 宿州市| 克东县| 阿克| 都兰县| 贞丰县| 蓬安县| 万安县| 呼和浩特市| 寻甸| 荔波县| 镶黄旗| 高州市| 东乌珠穆沁旗| 基隆市| 灌云县| 锦屏县| 元江| 新昌县| 汨罗市| 三台县| 洛浦县| 三河市| 肇东市| 平阳县| 东辽县| 陵川县| 时尚| 乌恰县| 贵德县| 神池县| 布尔津县| 镇宁| 永昌县| 和林格尔县|