List集合源碼

注意:基于jdk1.8

1. ArrayList

1.1 ArrayList類結(jié)構(gòu)

在這里插入圖片描述

1.1.1 Cloneable接口

一個類要調(diào)用clone()方法篓像,就要實現(xiàn)Cloneable接口并且重寫Objectclone()方法,否則會報CloneNotSupportedException 異常皿伺,并且要在clone()方法中調(diào)用了super.clone()员辩,這意味著無論clone類的繼承結(jié)構(gòu)是什么樣的,都調(diào)用了java.lang.Object類的clone()方法鸵鸥。

1.1.2 RandomAccess接口

實現(xiàn)了RandomAccess 接口則使用for循環(huán)方法遍歷奠滑,沒實現(xiàn)則使用Iterator方法遍歷,我們知道ArrayList實現(xiàn)了RandomAccess 接口妒穴,但是LinkedList并沒有實現(xiàn)這個接口宋税,這是因為ArrayListfor循環(huán)速度較快,和LinkedListIterator速度更快讼油。

1.1.3 Serializable接口

Serializable是序列化接口杰赛,ArrayList重寫了readObject()writeObject()方法
readObject()即反序列化,writeObject()即序列化

1.2 ArrayList屬性

//初始容量為10
private static final int DEFAULT_CAPACITY = 10;  
//指定該ArrayList容量為0時返回該空數(shù)組
private static final Object[] EMPTY_ELEMENTDATA = {};
//他與EMPTY_ELEMENTDATA區(qū)別是矮台,EMPTY_ELEMENTDATA是在ArrayList容量為0時返回淆攻,后者默認(rèn)返回
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//保存添加到ArryList中的元素
transient Object[] elementData;
//ArrayList實際大小
private int size;

1.3 構(gòu)造方法

在這里插入圖片描述

1.4 add方法

1.4.1 add(E e)

 public boolean add(E e) {
      ensureCapacityInternal(size + 1);  // Increments modCount!!
      elementData[size++] = e;
      return true;
  }

上面的方法實現(xiàn)了下面兩個

  • 確認(rèn)list容量,嘗試容量加1嘿架,看看有無必要
  • 添加元素

在這里插入圖片描述

隨后調(diào)用ensureExplicitCapacity()來確定明確的容量
在這里插入圖片描述

接下來看grow()函數(shù)
在這里插入圖片描述

總結(jié):

首先去檢查一下數(shù)組的容量是否足夠瓶珊,如果足夠就直接添加,如果不夠就

  • 擴(kuò)容到原來的1.5倍
  • 第一次擴(kuò)容后,如果容量還是小于minCapacity耸彪,就將容量擴(kuò)充為minCapacity伞芹。

1.4.2 add(int index, E element)

 public void add(int index, E element) {
      rangeCheckForAdd(index);

      ensureCapacityInternal(size + 1);  
      System.arraycopy(elementData, index, elementData, index + 1,
                         size - index);
      elementData[index] = element;
      size++;
  }
在這里插入圖片描述

1.5 ArrayList總結(jié)

  • ArrayList是基于動態(tài)數(shù)組實現(xiàn)的,在增刪時候,需要數(shù)組的拷貝復(fù)制唱较。
  • ArrayList的默認(rèn)初始化容量是10扎唾,每次擴(kuò)容時候增加原先容量的一半,也就是變?yōu)樵瓉淼?.5倍
  • 刪除元素時不會減少容量南缓,若希望減少容量則調(diào)用trimToSize()
  • 它不是線程安全的胸遇。它能存放null值。

2. Vector

  • Vector是jdk1.2的類了汉形,比較老舊的一個集合類纸镊。
  • Vector底層也是數(shù)組,與ArrayList最大的區(qū)別就是:同步(線程安全)
  • 如果想要ArrayList實現(xiàn)同步概疆,可以使用Collections的方法:List list =
    Collections.synchronizedList(new ArrayList(...));逗威,就可以實現(xiàn)同步了
  • ArrayList在底層數(shù)組不夠用時在原來的基礎(chǔ)上擴(kuò)展0.5倍,Vector是擴(kuò)展1倍岔冀。

3. LinkedList

3.1 LinkedList類結(jié)構(gòu)圖

在這里插入圖片描述
  • 沒有實現(xiàn)RandomAccess接口凯旭,因為他用迭代器遍歷更快
  • LinkedList底層是雙向鏈表
  • LinkedList實現(xiàn)了Deque接口,因此使套,我們可以操作LinkedList像操作隊列和棧一樣

3.2 屬性

size罐呼,頭結(jié)點,尾結(jié)點


在這里插入圖片描述

3.3 構(gòu)造方法

在這里插入圖片描述

3.4 add

頭插和尾插

在這里插入圖片描述

在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侦高,一起剝皮案震驚了整個濱河市弄贿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矫膨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件期奔,死亡現(xiàn)場離奇詭異侧馅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)呐萌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門馁痴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肺孤,你說我怎么就攤上這事罗晕。” “怎么了赠堵?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵小渊,是天一觀的道長。 經(jīng)常有香客問我茫叭,道長酬屉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮呐萨,結(jié)果婚禮上杀饵,老公的妹妹穿的比我還像新娘。我一直安慰自己谬擦,他們只是感情好切距,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惨远,像睡著了一般谜悟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锨络,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天赌躺,我揣著相機(jī)與錄音,去河邊找鬼羡儿。 笑死礼患,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掠归。 我是一名探鬼主播缅叠,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虏冻!你這毒婦竟也來了肤粱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤厨相,失蹤者是張志新(化名)和其女友劉穎领曼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛮穿,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡庶骄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了践磅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片单刁。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖府适,靈堂內(nèi)的尸體忽然破棺而出羔飞,到底是詐尸還是另有隱情,我是刑警寧澤檐春,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布逻淌,位于F島的核電站,受9級特大地震影響疟暖,放射性物質(zhì)發(fā)生泄漏恍风。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朋贬。 院中可真熱鬧凯楔,春花似錦、人聲如沸锦募。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糠亩。三九已至虐骑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赎线,已是汗流浹背廷没。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留垂寥,地道東北人颠黎。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像滞项,于是被迫代替她去往敵國和親狭归。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容