HashMap如何新增元素詳解

2021-10-03 22:50:23 字數 1494 閱讀 4299

map介面是乙個雙邊佇列,擁有key,value兩個屬性,其中key在儲存的集合中不允許重複,value可以重複。

// jdk1.8node節點

static

class

node

implements

map.entry

// 下面省略**

}

// 儲存元素的陣列,加上transient關鍵字代表不可以被序列化

transient node

table;

// 這個方法是hashmap對外公開的新增元素方法

public v put

(k key, v value)

final v putval

(int hash, k key, v value,

boolean onlyifabsent,

boolean evict)

// 比較鍊錶的下乙個節點的hash值和equals

if(e.hash == hash &&

((k = e.key)

== key ||

(key != null && key.

equals

(k))))

break

; p = e;}}

// 如果e不等於null則證明,在鍊錶中存在相同的元素,則進行替換

if(e != null)

}++modcount;if(

++size > threshold)

resize()

;afternodeinsertion

(evict)

;return null;

}// 將鍊錶改造成紅黑樹

final

void

treeifybin

(node

tab,

int hash)

tl = p;

}while

((e = e.next)

!= null);if

((tab[index]

= hd)

!= null)

hd.treeify

(tab);}

}

因為map的存值的時候是先計算hash值,然後再判斷equals,通過這兩個值是否都為true來判斷該元素是否再map中已經存在。如果不重寫這兩個方法,可能會存在我們認為相同,但是他們的hash或者equals不同的元素也能存進map中,從而達不到key唯一的效果。

因為我們map的儲存資料結構是陣列加鍊表加紅黑樹結構,如果沒有負載因子,map是不可能滿的,所以加上乙個負載因子的概念來判斷陣列是否擴容,減少鍊錶的負擔。

js jquery新增元素

一 js 1.var el document.createelement a 建立元素 document.body.removechild el 移除子元素 charcodeat var preflag new string fd company id 二 jquery 1.jquery獲取得到的陣...

jQuery新增元素

新增新的html內容例項 prepend 在被選元素的開頭插入內容 jquery prepend 方法在被選元素的開頭插入內容。例項 p prepend 在開頭追加文字 在上面的例子中,我們只在被選元素的開頭 結尾插入文字 html。例項function before 在被選元素之前插入內容 jqu...

ArrayList新增元素

如果沒有指定長度,則只是初始化乙個空陣列。public arraylist 如果指定了長度,則必需大於1 public arraylist int initialcapacity else if initialcapacity 0 else 初始化時如果指定了集合,可以看到是空集合的情況下,其實也是...