精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從面試角度分析LinkedList源碼

開發 前端
LinkedList底層是由雙向鏈表實現的。鏈表好比火車,每節車廂包含了車廂和連接下一節車廂的連接點。而雙向鏈表的每個節點不僅有指向下一個節點的指針,還有指向上一個節點的指針。

[[358239]]

注:本系列文章中用到的jdk版本均為java8

LinkedList類圖如下:

 

LinkedList底層是由雙向鏈表實現的。鏈表好比火車,每節車廂包含了車廂和連接下一節車廂的連接點。而雙向鏈表的每個節點不僅有指向下一個節點的指針,還有指向上一個節點的指針。

在LinkedList源碼中有一個Node靜態類,源碼如下:

  1. private static class Node<E> { 
  2.     E item; 
  3.     Node<E> next
  4.     Node<E> prev; 
  5.  
  6.     Node(Node<E> prev, E element, Node<E> next) { 
  7.         this.item = element; 
  8.         this.next = next
  9.         this.prev = prev; 
  10.     } 

一個Node節點包含三個部分,分別是

  • item:數據
  • next:下一個節點的指針
  • prev:上一個節點的指針

LinkedList的主要變量如下:

  1. // 集合中的元素數量 
  2. transient int size = 0; 
  3.  
  4. /** 
  5.   * 首節點的指針. 
  6.   * Invariant: (first == null && last == null) || 
  7.   *            (first.prev == null && first.item != null
  8.   */ 
  9. transient Node<E> first
  10.  
  11. /** 
  12.   * 尾結點的指針. 
  13.   * Invariant: (first == null && last == null) || 
  14.   *            (last.next == null && last.item != null
  15.   */ 
  16. transient Node<E> last

一、添加元素

LinkedList支持在任意節點位置添加元素,不僅提供了集合常用的add()方法,還提供了addFirst()和addLast(),add()方法默認調用addLast()方法,也就是默認是往鏈表尾部插入元素的。

add()方法源碼:

  1. public boolean add(E e) { 
  2.     linkLast(e); 
  3.     return true

1.1 尾部插入元素

linkLast()源碼如下:

  1. void linkLast(E e) { 
  2.     final Node<E> l = last
  3.     final Node<E> newNode = new Node<>(l, e, null); 
  4.     last = newNode; 
  5.     if (l == null
  6.         first = newNode; 
  7.     else 
  8.         l.next = newNode; 
  9.     size++; 
  10.     modCount++; 

我們來畫張圖演示一下如何給鏈表尾部插入元素:

假如鏈表中沒有元素

對應源碼中的if語句,如果沒有元素則新增的這個節點為鏈表中唯一的一個元素,既是首節點,又是尾結點,前一個元素的指針和后一個元素的指針都是null。這里注意head節點不是第一個節點,head節點只是標識了這個鏈表的地址。

 

假如鏈表中有元素

對應源碼中else語句。先將新增的元素當成Last節點,然后將原來的Last節點的next指向新節點。

  1. else 
  2.     l.next = newNode; 

 

一圖勝前言,畫個圖是不是什么都明白了。

1.2 頭部插入元素

linkFirst()源碼如下:

  1. private void linkFirst(E e) { 
  2.     final Node<E> f = first
  3.     final Node<E> newNode = new Node<>(null, e, f); 
  4.     first = newNode; 
  5.     if (f == null
  6.         last = newNode; 
  7.     else 
  8.         f.prev = newNode; 
  9.     size++; 
  10.     modCount++; 

還是根據上面的圖來解讀一下源碼,先將第一個節點賦值給中間變量f,將新節點newNode賦值給first節點。如果鏈表沒有元素,則Last節點和First節點都是新插入的節點newNode,否則,將原來的First節點的頭指針指向新節點。

二、刪除元素

LinkedList提供的刪除方法有根據索引和元素刪除,除此之外還提供刪除第一個元素和最后一個元素的方法,這里我們只分析一下根據索引刪除的方法。

  1. public E remove(int index) { 
  2.     checkElementIndex(index); 
  3.     return unlink(node(index)); 

checkElementIndex(index)方法就是用來判斷傳輸的索引值是否合法,不合法則拋出數組越界異常。重點來看一下unlink(node(index))方法是如何刪除元素的。

node(index)方法源碼:

node(index)方法就是根據索引獲取該索引位置的節點

  1. Node<E> node(int index) { 
  2.     // assert isElementIndex(index); 
  3.     // 如果指定下標 < 一半元素數量,則從首結點開始遍歷 
  4.     // 否則,從尾結點開始遍歷 
  5.     if (index < (size >> 1)) { 
  6.         Node<E> x = first
  7.         for (int i = 0; i < index; i++) 
  8.             x = x.next
  9.         return x; 
  10.     } else { 
  11.         Node<E> x = last
  12.         for (int i = size - 1; i > index; i--) 
  13.             x = x.prev; 
  14.         return x; 
  15.     } 

unlink(Node x)源碼如下:

  1. E unlink(Node<E> x) { 
  2.     // assert x != null
  3.     final E element = x.item; 
  4.     final Node<E> next = x.next
  5.     final Node<E> prev = x.prev; 
  6.  
  7.     if (prev == null) { 
  8.         first = next
  9.     } else { 
  10.         prev.next = next
  11.         x.prev = null
  12.     } 
  13.  
  14.     if (next == null) { 
  15.         last = prev; 
  16.     } else { 
  17.         next.prev = prev; 
  18.         x.next = null
  19.     } 
  20.  
  21.     x.item = null
  22.     size--; 
  23.     modCount++; 
  24.     return element; 

畫張圖分析一下刪除是如何進行的:

 

  1. 假設刪除的是第一個元素:則它的prev==NULL,我們需要將他的后一個元素(圖中的second)作為第一個元素
  2. 假設刪除的是最后一個元素,則它的next==null,我們需要將他的前一個元素(圖中的second)作為最后一個元素
  3. 如果是中間的任意元素,則需要將它的前一個元素的next指針指向它的后一個元素,同時將它的后一個元素的prev指針指向它的前一個元素。

三、總結

 

LinkedList底層是由雙向鏈表實現的,由于是鏈表實現的,不僅要存放數據,還要存放指針,所以內存開銷要比ArrayList大,刪除元素不需要移動其他元素,只需要改變指針的指向,因此刪除效率更高,同時它沒有實現RandomAccess接口,因此使用迭代器遍歷要比for循環更加高效。LinkedList也支持插入重復值和空值,同樣也是線程不安全的。

本文轉載自微信公眾號「 Java旅途」,可以通過以下二維碼關注。轉載本文請聯系 Java旅途公眾號。

 

責任編輯:武曉燕 來源: Java旅途
相關推薦

2020-12-14 08:03:52

ArrayList面試源碼

2022-03-08 11:29:06

Linux進程系統

2021-07-20 10:26:53

源碼底層ArrayList

2018-10-22 14:28:26

面試官數據公司

2021-03-15 18:47:25

日志開發源碼

2014-05-12 10:06:15

面試測試文化360

2018-04-27 14:46:07

面試簡歷程序員

2023-03-13 07:43:51

PHP類型轉換

2023-09-11 08:51:23

LinkedList雙向鏈表線程

2023-04-14 08:39:01

AQS方法JDK5

2016-11-04 10:30:17

微信小程序

2021-09-10 00:34:22

Java 線程啟動

2021-09-01 17:51:53

技術LinkedList 源碼

2021-05-28 11:54:41

區塊鏈數據分析密碼學角度

2017-09-25 16:21:30

Spark on yacluster模式

2017-04-13 09:45:03

大數據新媒體VC

2019-04-28 16:10:50

設計Redux前端

2021-12-09 08:31:01

ReentrantLoAQS

2020-02-04 09:53:05

數據安全數據泄漏信息安全

2025-03-31 00:00:00

MCPAPI服務器通信
點贊
收藏

51CTO技術棧公眾號

国模极品一区二区三区| 福利视频导航一区| 99久久自偷自偷国产精品不卡| 99自拍视频在线| 这里视频有精品| 午夜伦欧美伦电影理论片| 99理论电影网| 国产高清中文字幕| 日本一区二区免费高清| 日韩午夜av电影| 欧洲黄色一级视频| 成人性生交大片免费看午夜| 久久99精品久久只有精品| yw.139尤物在线精品视频| 在线观看免费视频国产| 经典三级一区二区| 亚洲人成网站影音先锋播放| 国产男女猛烈无遮挡91| 无码人妻精品中文字幕| 精品久久ai| 欧美乱妇一区二区三区不卡视频| 日本aa在线观看| 国产中文字幕在线| 国产成人在线观看| 国产精品99久久久久久www| 小向美奈子av| 亚洲美女15p| 91精品一区二区三区久久久久久| 粉嫩虎白女毛片人体| 爱情岛论坛亚洲品质自拍视频网站| 欧美激情一区二区三区在线| 精品乱子伦一区二区三区| 国产三级小视频| 日本女人一区二区三区| 5566成人精品视频免费| 国产中文字幕免费| 国产精品二区影院| 久久天堂电影网| 91导航在线观看| 窝窝社区一区二区| 亚洲精品www| 无码人妻aⅴ一区二区三区玉蒲团| av成人免费看| 91极品美女在线| 黄在线观看网站| www视频在线观看| 亚洲高清三级视频| 97久久国产亚洲精品超碰热| 国产原创在线观看| 17c精品麻豆一区二区免费| 亚洲国产精品综合| 97在线观看免费观看高清| 国产日产欧美一区二区视频| 欧美日韩喷水| 黄色毛片在线观看| 久久精品这里都是精品| 日韩国产精品一区二区| 国产二区视频在线观看| 国产精品久久毛片av大全日韩| 天堂av一区二区| 成人精品一区二区三区免费 | 亚洲男人天堂av网| 成年人黄色在线观看| 美女免费久久| 一区二区三区在线免费| 男人添女人荫蒂免费视频| 国产蜜臀一区二区打屁股调教| 亚洲一区二区三区视频在线| 成人黄色av片| 依依综合在线| 欧美丝袜丝交足nylons图片| 日韩一区二区三区久久| 96视频在线观看欧美| 日韩欧美国产一二三区| 欧美肉大捧一进一出免费视频| 亚州综合一区| 伊人久久精品视频| 欧美国产在线看| 日韩香蕉视频| 国产精品 欧美在线| 91尤物国产福利在线观看| 国产激情视频一区二区在线观看| 国产伦理久久久| 美国成人毛片| 国产精品免费视频一区| 人人妻人人澡人人爽欧美一区| www.51av欧美视频| 欧美伊人精品成人久久综合97| 亚洲人视频在线| 国产+成+人+亚洲欧洲在线| 亚洲美女又黄又爽在线观看| 三上悠亚作品在线观看| 亚洲黄网站黄| 国产精品久久久久秋霞鲁丝| www日本高清| 久久嫩草精品久久久久| 亚洲精品偷拍视频| 中文字幕乱码在线播放| 在线播放亚洲一区| 日韩精品视频一区二区| 国产精品片aa在线观看| 久久国产精品免费视频 | 亚洲人成久久| 国产欧洲精品视频| 午夜激情在线视频| 亚洲乱码国产乱码精品精98午夜| 一区二区传媒有限公司| 国产不卡精品在线| 亚洲日本中文字幕免费在线不卡| 777777国产7777777| 亚洲男人影院| av一区和二区| 免费在线看a| 色伊人久久综合中文字幕| 国产黄色一区二区三区| 欧美精品一区二区三区精品| 久久久亚洲国产| 91 中文字幕| 国产女同性恋一区二区| 99热在线这里只有精品| 九九九九九九精品任你躁| 亚洲天堂av电影| 国产午夜精品无码| 久久成人免费日本黄色| 欧美日韩日本网| 麻豆网站免费在线观看| 欧美大片一区二区| 在线观看亚洲网站| 麻豆精品视频在线| 日韩福利视频| 国产成人精品123区免费视频| 精品国产91久久久久久久妲己| 日韩av网站在线播放| 久久一本综合频道| 久久er99热精品一区二区三区 | 性欧美长视频免费观看不卡| 99riav国产| 中文字幕亚洲区| 玩弄japan白嫩少妇hd| 日韩免费电影在线观看| 久久久久久中文字幕| 国产成人久久精品77777综合 | 午夜精品成人av| 日韩av在线免费| 激情五月色婷婷| 福利电影一区二区| 欧美精品卡一卡二| а√中文在线天堂精品| 樱桃国产成人精品视频| 国产成人av电影| 天天综合网网欲色| 在线免费观看亚洲| 成人性生活av| 国产美女一区视频| 污污影院在线观看| xvideos国产在线视频| 高h视频在线| 日韩精品视频无播放器在线看 | 国产伦视频一区二区三区| 天堂资源在线中文| 欧美日高清视频| 国产黄色片在线| 国内成人精品2018免费看| 中文字幕免费高| 日本亚洲视频| 国精产品一区一区三区有限在线| 免费a视频在线观看| 天天做天天摸天天爽国产一区 | 国产精品一区二区三区av麻 | 国产蜜臀97一区二区三区| 一本久道综合色婷婷五月| 色135综合网| 91国产丝袜在线放| 人成在线免费网站| 在线性视频日韩欧美| 国产美女裸体无遮挡免费视频| 一区二区三区在线播放| 久久久久麻豆v国产精华液好用吗| 在线午夜精品| 亚洲国产欧洲综合997久久| 电影中文字幕一区二区| 久久久久久午夜| 风间由美一区| 日韩欧美国产一区二区在线播放| 成人精品在线看| 国产精品女上位| 在线观看成人动漫| 免费观看在线色综合| 国产卡一卡二在线| 亚洲精品aaaaa| 国产免费一区二区三区在线能观看| 羞羞电影在线观看www| 精品一区二区电影| 91精品国自产| 亚洲成人av一区二区三区| 青青草自拍偷拍| 99久久精品免费看| 亚洲精品免费一区亚洲精品免费精品一区 | 好吊日在线视频| 97久久精品人人做人人爽50路| 色播五月激情五月| 亚洲三级国产| 免费看av软件| 国产一区二区三区91| 成人自拍爱视频| 久久99久久久精品欧美| 91超碰caoporn97人人| a毛片在线观看| 一区二区三区国产视频| 日韩专区第一页| 91麻豆精品国产| 探花国产精品一区二区| 欧美日韩国产一区二区| 91麻豆免费视频网站| 中文字幕欧美日韩一区| 黄色片视频免费观看| 国产经典欧美精品| 中文字幕在线视频精品| 日日夜夜免费精品视频| 日本丰满少妇xxxx| 一区二区三区网站| 天堂资源在线亚洲资源| 亚洲人和日本人hd| 国产日韩欧美精品| 秋霞一区二区三区| 国产精品午夜视频| 91看片一区| 欧美亚洲午夜视频在线观看| 久久国产精品黑丝| 欧美激情国产日韩精品一区18| 麻豆网站在线观看| 亚洲欧美日韩区| 欧美欧美欧美| 亚洲欧洲第一视频| 亚洲三区在线观看无套内射| 亚洲国产精品久久91精品| www.97av| 日韩美女一区二区三区| www精品国产| 日韩久久精品一区| 国产综合视频在线| 亚洲成人xxx| 女人18毛片一区二区三区| 日韩精品中文字幕在线不卡尤物| 一区二区国产欧美| 91精品福利在线一区二区三区| 怡红院男人的天堂| 欧美日韩国产大片| 在线免费av网| 欧美一区三区二区| www.蜜臀av.com| 精品乱码亚洲一区二区不卡| 午夜精品久久久久久久99热黄桃| 91精品国产91综合久久蜜臀| 国产免费av电影| 精品国产一区二区三区四区四| 亚洲成a人片在线| 欧美精品一区二区三| 国产91久久久| 亚洲精品一区二区三区不| 免费成人av电影| 伊人激情综合网| 黄色在线观看网站| 欧美激情视频网| 日产福利视频在线观看| 日本欧美精品在线| 精品自拍视频| 3d动漫啪啪精品一区二区免费| 一区二区三区免费在线看| 九九九九精品九九九九| 青青草91久久久久久久久| a级黄色片网站| 亚洲大黄网站| www.欧美日本| 国产综合成人久久大片91| 美女网站视频在线观看| wwwwww.欧美系列| 国产探花在线视频| 午夜欧美在线一二页| 国产免费一区二区三区四区五区| 欧美日韩视频在线第一区| www久久久久久| 亚洲天堂av在线播放| 免费av毛片在线看| 97热精品视频官网| 欧美成人三级| 国产一区二区免费在线观看| jvid福利在线一区二区| 三级在线免费观看| 久久精品毛片| 亚洲丝袜在线观看| 国产无一区二区| 国产亚洲欧美精品久久久久久| 色综合久久66| 成人av无码一区二区三区| 亚洲欧美在线播放| 99自拍视频在线观看| 国产成人亚洲综合91| 综合久久成人| 一区二区在线高清视频| 亚洲欧美日本国产专区一区| www.久久av.com| 久久综合久久综合久久| 色在线观看视频| 欧美亚一区二区| 天堂在线视频免费观看| 久久久97精品| 黄瓜视频成人app免费| 91丨九色丨国产| 91青青国产在线观看精品| 丰满少妇被猛烈进入高清播放| 国产精品一区二区x88av| 手机看片日韩av| 婷婷综合在线观看| 亚洲第一成人av| 另类少妇人与禽zozz0性伦| 国产日韩另类视频一区| av色综合网| 欧美va久久久噜噜噜久久| 无码人妻丰满熟妇区毛片18| 成人一道本在线| 91视频综合网| 欧美日韩国产系列| 爱久久·www| 琪琪亚洲精品午夜在线| 老汉色老汉首页av亚洲| www.亚洲成人网| 精品影视av免费| 成人欧美一区二区三区黑人一 | 91wwwcom在线观看| 91欧美极品| 久久福利一区二区| 国内精品国产成人| 国产白丝一区二区三区 | 毛片毛片毛片毛| 国产精品久久久久久久久快鸭| 日韩美一区二区| 亚洲色图13p| 欧美艳星kaydenkross| 久久涩涩网站| 亚洲伊人网站| 中文人妻一区二区三区| 岛国视频午夜一区免费在线观看| 人人妻人人澡人人爽久久av| 久久男人资源视频| 欧美福利在线播放网址导航| 人人干视频在线| 91女人视频在线观看| 日韩黄色在线播放| 亚洲欧美中文字幕| 国产资源一区| 日韩 欧美 自拍| 国产麻豆视频一区| 久久一级黄色片| 亚洲娇小xxxx欧美娇小| 一个人看的www视频在线免费观看| 欧美极品色图| 日韩精品电影在线| 国产精品一区二区亚洲| 日韩一区二区免费电影| 欧美极品少妇videossex| 成人欧美一区二区| 99视频一区| 免费看91的网站| 91精品一区二区三区久久久久久 | 天天揉久久久久亚洲精品| 亚洲图片 自拍偷拍| 亚洲自拍欧美精品| 飘雪影院手机免费高清版在线观看| 国产成人+综合亚洲+天堂| 日韩精品影视| 制服.丝袜.亚洲.中文.综合懂| 午夜欧美一区二区三区在线播放| 蜜桃视频在线免费| 成人黄色免费片| 一本色道久久综合亚洲精品高清| 中文字幕一区二区三区人妻不卡| 欧美三级电影网| 国精产品一区一区三区mba下载| 久久婷婷国产综合尤物精品| 日韩黄色免费网站| 黄色一级视频免费观看| 亚洲另类图片色| 成人av在线播放| www一区二区www免费| 国产精品黄色在线观看| 欧美特黄一级视频| 国产精品男人的天堂| 欧美特黄一区| 免费看91的网站| 亚洲成avwww人| www成人在线视频| 国产精品无码免费专区午夜| 国产视频一区二区在线| 国产三级伦理片| 国产精品久久久久77777| 欧美日韩四区| ass极品国模人体欣赏| 亚洲第一精品久久忘忧草社区| 成人影院在线免费观看|