乾貨 JAVA 8 中List原始碼深入解析

2021-09-13 02:48:06 字數 3016 閱讀 6697

前言:如果給list,set,map放一塊的快,原始碼太多,所以分開搞,更加清楚。

collection的子類只要有list,set兩個介面

collection:作為list和set的父類

collections:集合類的乙個工具類/幫助類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜尋以及執行緒安全等各種操作。

在說其他內容的時候,先來說兩個重要的api:

array.copyof(t original, int newlength)

copyof引數詳解:

* @param original the array to be copied --要複製的陣列

* @param newlength the length of the copy to be --複製陣列的長度

system.arraycopy(src, srcpos, dest, destpos, length);

arraycopy引數詳解:

* @param src the source array. ---源陣列。

* @param srcpos starting position in the source array. --源陣列中的起始位置。

* @param dest the destination array. ---目標陣列

* @param destpos starting position in the destination data.--目標陣列中的起始位置。

* @param length the number of array elements to be copied.--表示的是長度

arraylist底層基於陣列實現,所以下標是從0開始的

transient object[

] elementdata;

arraylist底層預設陣列初始化大小為10個object陣列

public

arraylist

(int initialcapacity)

else

if(initialcapacity ==0)

else

}/**

* constructs an empty list with an initial capacity of ten.

*/public

arraylist()

新增元素後大於當前陣列的長度,則進行擴容,將陣列的長度增加原來陣列的一半。

//這個方法主要是來進行擴容的

//在說擴容之前,先說下位移,比如說2<<3(其實相當於是 2的三次方),列印的結果是16

//2>>>3 (其實就相當於 2/2/2),列印的結果為 0

private

void

grow

(int mincapacity)

在這裡主要拿其中的啷個方法來大概說下:

remove方法:

public e remove

(int index)

效果圖:

每次刪除的時候,會給其他的元素前邊挪一挪,然後最後的設定為null。

addall方法:

//引數說明:index主要是插入的下標,element指的是插入的物件

public

void

add(

int index, e element)

新增的原理:

每次新增的時候,會將後邊的資料後邊移除。

其實vecrot和arraylist底層是一樣的,差別就在於vector中都是synachized方法修飾的,還有乙個就是vecrot擴容是原來的2倍

眾多方法都是被synchronized修飾的

public

synchronized

void

copyinto

(object[

] anarray)

public

synchronized

void

trimtosize()

}public

synchronized

void

ensurecapacity

(int mincapacity)

}

這個就是雙倍的擴容。

private

void

grow

(int mincapacity)

雙鏈表結構

transient node

first;

//定義第乙個節點

transient node

last;

//定義最後乙個節點

增刪改查都是根據上乙個節點和下乙個節點來操作的

list中包括arraylist,linklist,vetor以及其他子類

arraylist:底層採用的是陣列,查詢比較快,執行緒不安全,效率高,擴容為原來的1.5倍。

vector:執行緒安全,效率低,擴容為原來的2倍

linklist:底層採用的是雙向鍊錶,增刪改比較快

在實戰中學習,在快樂中成長

Java8中list轉map方法總結

1.利用collectors.tomap方法進行轉換 public map getidnamemap list accounts 其中第乙個引數就是可以,第二個引數就是value的值。2.收集物件實體本身 在開發過程中我們也需要有時候對自己的list中的實體按照其中的乙個字段進行分組 比如 id l...

java原始碼解析 List

an ordered collection 有序集合 list 的類資訊 public inte ce list extends collection collection 的類資訊 定義基本的method public inte ce collection extends iterable ite...

java8 多個list物件用lambda求差集

業務場景 呼叫同步介面獲取當前全部有效賬戶,資料庫已存在部分賬戶資訊,因此需要篩選同步介面中已存在本地的帳戶。呼叫介面獲取的資料集合 listlist response.getdata getitems 本地查詢出來的賬戶集合 listtowlist accountrepository.findal...