關於Map的原始碼分析

2022-09-11 01:42:17 字數 2725 閱讀 6006

map是乙個介面,其中有一些常用的方法,j**a8以後新增了很多新方法

j**a8中新增的方法:

其中都有這樣一句話:預設實現不會保證此方法的同步或原子屬性。 提供原子性保證的任何實現都必須覆蓋此方法並記錄其併發屬性。

1、返回的結果為指定鍵對映到的值,如果此對映不包含該鍵的對映,defaultvalue

default

v getordefault(object key, v defaultvalue)

2、對此對映中的每個條目執行給定的操作,直到所有條目都被處理或操作引發異常。 除非實現類另有指定,否則按照進入設定迭代的順序執行操作(如果指定了迭代順序)。操作引發的異常被**給呼叫者。

default

void foreach(biconsumer<? super k, ? super v>action)

catch

(illegalstateexception ise)

action.accept(k, v);

}}

3、將每個條目的值替換為對該條目呼叫給定函式的結果,直到所有條目都被處理或該函式丟擲異常。 函式丟擲的異常被**給呼叫者。

default

void replaceall(bifunction<? super k, ? super v, ? extends v>function)

catch

(illegalstateexception ise)

//ise thrown from function is not a cme.

try

catch

(illegalstateexception ise)

}}

4、如果指定的鍵尚未與值相關聯(或對映到null)將其與給定值相關聯並返回null,否則返回當前值。

default

v putifabsent(k key, v value)

return

v; }

5、僅當指定的金鑰當前對映到指定的值時刪除該條目。

default

boolean

remove(object key, object value)

remove(key);

return

true

; }

6、僅當當前對映到指定的值時,才能替換指定鍵的條目。

default

boolean

replace(k key, v oldvalue, v newvalue)

put(key, newvalue);

return

true

; }

7、只有當目標對映到某個值時,才能替換指定鍵的條目。

default

v replace(k key, v value)

return

curvalue;

}

8、如果指定的鍵尚未與值相關聯(或對映到null),則嘗試使用給定的對映函式計算其值,並將其輸入到此對映中,除非null

default

v computeifabsent(k key,

function

v v;

if ((v = get(key)) == null

) }

return

v; }

9、如果指定的金鑰的值存在且非空,則嘗試計算給定金鑰及其當前對映值的新對映。如果函式返回null,則刪除對映。 如果函式本身引發(未檢查)異常,則異常被重新引導,並且當前對映保持不變。

default

v computeifpresent(k key,

bifunction

v oldvalue;

if ((oldvalue = get(key)) != null

) else

} else

}

10、嘗試計算指定金鑰及其當前對映值的對映(如果沒有當前對映,則null)。

default

v compute(k key,

bifunction

v oldvalue =get(key);

if (newvalue == null

) else

} else

}

11、如果指定的鍵尚未與值相關聯或與null相關聯,則將其與給定的非空值相關聯。 否則,將關聯值替換為給定重對映函式的結果,如果結果為null。 當組合鍵的多個對映值時,該方法可能是有用的。

default

v merge(k key, v value,

bifunction

objects.requirenonnull(value);

v oldvalue =get(key);

v newvalue = (oldvalue == null) ?value :

if(newvalue == null

) else

return

newvalue;

}}

Map集合 原始碼分析

map的實現類的結構 map 雙列資料,儲存key value對的資料 hashmap 作為map的主要實現類 執行緒不安全的,效率高 可以儲存null和key的value hashmap的底層 陣列 鍊錶 jdk7之前 陣列 鍊錶 紅黑樹 jdk8 linkedhashmap 保證在遍歷map元素...

map運算元原始碼分析

val rdd1 sc.parallelize list 1 2,3 4,5 rdd1.map a a 2 collect foreach println def map u classtag f t u rdd u withscopeprivate spark def clean f anyref...

關於strcpy原始碼分析

注意到乙個帖子 strdest strsrc 0 哪兒前輩可以解釋下裡面具體執行的步驟呢?對於這樣的表示式,我們通常會有這樣三種看法 1.這種寫法不但沒有錯誤 當然也沒有bug 而且寫法緊湊。2.這種寫法雖然沒有錯誤,但是不夠直觀,理解起來有點麻煩,可能還會導致理解錯誤。3.這種寫法中存在未定義的地...