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 初始化時如果指定了集合,可以看到是空集合的情況下,其實也是...