精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲欧美日韩在线一区| 亚洲成人免费观看| 91久久久亚洲精品| 久久久99精品| 一区三区在线欧| 欧美高清dvd| 成年人网站免费视频| 成年人免费在线视频| 国产99久久久精品| 国产精品久久久久高潮| 青娱乐国产精品| 日韩电影不卡一区| 91.com视频| 漂亮人妻被中出中文字幕| 成人国产免费电影| 久久久久国产一区二区三区四区| 91免费在线视频网站| 免费看日批视频| 综合亚洲视频| 亚洲桃花岛网站| yjizz视频| 亚洲久草在线| 色婷婷精品大视频在线蜜桃视频| 日本免费黄色小视频 | 国产婷婷97碰碰久久人人蜜臀| 亚洲午夜激情影院| 国产综合色区在线观看| 亚洲国产日韩一区二区| 青春草在线视频免费观看| 国产一区二区影视| 男生操女生视频在线观看| 精品视频偷偷看在线观看| 国产一区自拍视频| 中文字幕免费在线看| 精品电影一区| 久久手机免费视频| 国产又黄又粗的视频| 久久草在线视频| 欧美一区二区精美| 911av视频| 国产亚洲精彩久久| 日韩欧美精品网址| 久久综合九色综合88i| av大全在线| 国产精品卡一卡二| 日韩影片在线播放| 久草在现在线| 久久久久一区二区三区四区| 精品国产乱码一区二区三区四区| 亚洲第九十九页| 国内精品在线播放| 成人在线免费观看视视频| 中文字幕+乱码+中文字幕明步| 欧美一级久久| 日本视频久久久| 日韩久久中文字幕| 日韩精品乱码免费| 国产精品91在线| 国产字幕在线观看| 日本va欧美va欧美va精品| 国产第一区电影| 亚洲欧美日韩激情| 日本欧美加勒比视频| 国产精品美女午夜av| 中文在线a天堂| 蜜桃av一区二区三区| 国产免费一区视频观看免费| 又骚又黄的视频| 精品综合免费视频观看| 亚洲自拍在线观看| 精品国产999久久久免费| 国产电影精品久久禁18| 国产专区一区二区三区| 嫩草研究院在线观看| 26uuu久久综合| 午夜久久资源| 污污片在线免费视频| 亚洲国产精品综合小说图片区| 久艹视频在线免费观看| 亚洲优女在线| 精品污污网站免费看| 国产精品区在线| 欧美精品三级在线| 日韩电影中文 亚洲精品乱码| 在线免费观看黄色小视频| 日韩中文在线电影| 欧美精品日韩www.p站| 男女视频免费看| 日韩国产精品久久久| 国产精品亚洲精品| 亚洲美女福利视频| 国产农村妇女毛片精品久久麻豆| 中文字幕在线亚洲三区| 福利成人导航| 欧美午夜精品一区| 日本wwwwwww| 狠狠做深爱婷婷综合一区| xx视频.9999.com| 奇米影视第四色777| 美腿丝袜亚洲一区| 国产欧美日韩综合精品二区| av福利在线播放| 五月婷婷激情综合| 午夜天堂在线视频| 亚洲天堂日韩在线| 欧美乱妇高清无乱码| 国产精华7777777| 成人免费毛片aaaaa**| 日韩妆和欧美的一区二区| 四虎影院观看视频在线观看 | 国产精品99无码一区二区| 久久久天天操| 国产精品xxxx| 日本美女高清在线观看免费| 欧美日韩在线视频首页| 麻豆传媒在线看| 成人毛片免费看| 隔壁老王国产在线精品| 国产麻豆91视频| 久久精品视频网| 岛国大片在线播放| 高清不卡一区| 日韩中文综合网| 日本高清不卡码| 成人久久久精品乱码一区二区三区| 亚洲啪啪av| 精品3atv在线视频| 亚洲国产精品va在线看黑人动漫 | 国产黄色片在线观看| 午夜影院在线观看欧美| 日本一本在线视频| 91精品推荐| 国产日韩欧美视频| av男人的天堂在线| 欧美在线免费视屏| 天天躁夜夜躁狠狠是什么心态| 亚洲精华国产欧美| 国产精品国产三级欧美二区| 亚洲丝袜一区| 欧美一级片在线看| 天天综合天天做| 狠狠色狠狠色综合| 中文视频一区视频二区视频三区| 欧美色片在线观看| 亚洲性线免费观看视频成熟| 欧美a视频在线观看| 99久久99久久精品免费看蜜桃| 97久久国产亚洲精品超碰热| 日本一区二区三区视频在线看| 久久伊人精品天天| a级片免费视频| 亚洲欧美国产三级| 国偷自产av一区二区三区麻豆| 中文字幕一区二区av| 91精品中文在线| av在线导航| 精品美女一区二区三区| 日本少妇吞精囗交| 99精品欧美一区二区三区小说| 国产极品尤物在线| 夜夜春成人影院| 国产成人精品免费久久久久| 成人综合影院| 欧美精品99久久久**| 老女人性淫交视频| 成人h动漫精品一区二| 国产aaa一级片| 日韩在线观看一区| 亚洲综合社区网| 2021中文字幕在线| 亚洲欧美在线一区二区| 亚洲一级黄色大片| 亚洲精品日日夜夜| 四季av综合网站| 性欧美长视频| 亚洲欧洲另类精品久久综合| 一区二区三区四区高清视频| 性欧美在线看片a免费观看| 激情在线视频| 欧美丰满美乳xxx高潮www| 久久久久久久9999| 2017欧美狠狠色| 欧美男女交配视频| 国户精品久久久久久久久久久不卡| 精品日韩美女| 欧美激情福利| 久久人人看视频| yes4444视频在线观看| 日韩一区二区三区视频在线| 99精品视频99| 中文字幕在线不卡| 国产精品无码一区二区三| 免费成人性网站| 一二三四视频社区在线| 青青草91久久久久久久久| 成人在线免费网站| jizz欧美| 97色在线视频观看| 麻豆视频在线免费观看| 亚洲精品中文字幕女同| 国产福利第一页| 日本黄色一区二区| 麻豆一区二区三区精品视频| 国产精品无遮挡| 国产精品久久久久久在线观看| 男女男精品视频| 免费在线观看亚洲视频| 亚洲久久久久| 日韩一本精品| 蜜桃久久久久| 91精品综合久久| 99久久久国产精品免费调教网站| 海角国产乱辈乱精品视频| 五月婷婷在线视频| 国产手机视频精品| 欧美一级一区二区三区| 51精品国自产在线| 日本中文字幕在线| 亚洲成人午夜电影| 国产极品国产极品| 国产精品色呦呦| 亚洲一级中文字幕| 97久久精品人人做人人爽50路| 欧洲在线免费视频| 久久国产精品区| 男女视频一区二区三区| 国产亚洲一区在线| 国产美女在线一区| 国内精品久久久久久久97牛牛 | 91在线播放观看| 日本一区二区成人| 精品成人av一区二区三区| 成人av资源在线| 少妇献身老头系列| 国产精品影音先锋| 亚洲理论中文字幕| 韩国一区二区在线观看| 日本高清久久久| 日本欧美在线观看| 久久99爱视频| 日本va欧美va瓶| 男人插女人下面免费视频| 日韩一区欧美二区| 超碰av在线免费观看| 久久久xxx| 黄www在线观看| 亚洲欧洲一区| 亚洲熟妇无码一区二区三区| 伊人久久亚洲热| 欧美日韩一道本| 国产精品久久久久久模特 | 中文字幕欧美日韩一区二区| 日韩精品免费一区二区在线观看| 视频一区视频二区视频三区视频四区国产 | 电影k8一区二区三区久久| 欧美精品久久久久久久| av免费不卡| 97视频在线看| 免费观看一级欧美片| 日韩av片免费在线观看| 四虎4545www精品视频| 国产精品永久免费观看| 成人污版视频| 99re国产视频| 美国十次av导航亚洲入口| 欧美成人综合一区| 日韩aaaa| 91免费国产精品| 亚洲精品视频啊美女在线直播| 免费成人在线视频网站| 日韩成人午夜电影| 99日在线视频| 成人做爰69片免费看网站| 91av在线免费| 国产精品进线69影院| 欧美国产日韩在线观看成人| 亚洲国产精品久久不卡毛片| 青青草免费观看视频| 欧美午夜视频网站| www.久久久久久| 亚洲国产精久久久久久久| av网站无病毒在线| 欧美激情视频一区二区| 女生影院久久| 91免费欧美精品| 亚洲调教一区| 国产精品久久久影院| 国产亚洲精品久久久久婷婷瑜伽| 中文字幕国内自拍| 国产suv一区二区三区88区| 亚洲欧美视频在线播放| 中文字幕一区二区三区蜜月| 日本学生初尝黑人巨免费视频| 色婷婷综合久久久久中文| 99久久免费国产精精品| 亚洲精品综合精品自拍| 国产精品实拍| 日韩av免费在线看| 成人h动漫精品一区二区器材| 日韩中文不卡| 日韩亚洲国产精品| а 天堂 在线| 久久综合久久综合久久综合| 强行糟蹋人妻hd中文| 日本高清无吗v一区| 日韩中文字幕免费观看| 久久精品国产精品亚洲| 在线免费av资源| 亚洲中国色老太| 热久久天天拍国产| 日韩av在线第一页| 国产成人av电影在线| 性猛交娇小69hd| 欧美日韩国产精品| 亚洲国产成人精品一区二区三区| 在线看日韩av| 超碰一区二区| 国产精品美女黄网| 欧美va天堂| 午夜免费福利视频在线观看| 久久色成人在线| 国产精品7777777| 日韩精品一区二区三区在线观看| av男人的天堂在线| 国产精品高潮粉嫩av| 宅男在线一区| 免费成人在线视频网站| caoporen国产精品视频| 久久这里只有精品免费| 制服丝袜中文字幕一区| 9191在线| 国产精品入口夜色视频大尺度| 综合伊思人在钱三区| 啊啊啊一区二区| 99久久久国产精品免费蜜臀| 亚洲国产精品午夜在线观看| 欧美一区二区免费视频| 黄色一级大片在线免费看产| 国产日韩中文字幕| 91亚洲一区| 欧美性猛交xxxx乱大交91| 亚洲人吸女人奶水| 97人妻精品一区二区三区动漫| 最近2019中文字幕大全第二页| 久久久人成影片一区二区三区在哪下载| 精品综合在线| 翔田千里一区二区| 国产毛片久久久久久久| 在线观看不卡视频| 中文日本在线观看| 成人字幕网zmw| 欧美区日韩区| 黄色在线免费播放| 精品久久久久国产| 狠狠色伊人亚洲综合网站l| 国产精品第三页| 色综合久久网| 热久久久久久久久| 亚洲激情五月婷婷| 天天操天天舔天天干| 国产成人精彩在线视频九色| 日本久久综合| 亚洲av毛片在线观看| 午夜日韩在线电影| 青青青草原在线| 国产精品视频自在线| 欧美一区精品| 久久久久亚洲AV成人无码国产| 日韩欧美大尺度| 91露出在线| 成人动漫在线观看视频| 在线亚洲成人| аⅴ天堂中文在线网| 4438x成人网最大色成网站| 国产在线拍揄自揄拍视频| 免费看成人午夜电影| 久久国产尿小便嘘嘘| 久草资源在线视频| 亚洲女同性videos| www.成人| 女人天堂av手机在线| 国产精品久久免费看| 亚洲AV无码一区二区三区性| 日本精品免费观看| 亚洲电影影音先锋| 人妻无码一区二区三区| 欧美日韩在线综合| 第一中文字幕在线| 亚洲一区二区三区在线观看视频| 国产精品一品二品| 日本视频免费观看| 欧美丰满少妇xxxxx做受| 亚洲免费观看高清完整版在线观| 色综合五月婷婷| 色悠悠久久综合| 日韩欧美一起| 少妇免费毛片久久久久久久久| 成人久久视频在线观看| 在线中文字幕网站| 欧美在线日韩在线|