詳述HashSet類add方法底層原始碼(一)

2021-10-05 05:57:00 字數 1942 閱讀 8250

目錄

一、hashset add方法

二、hashmap put方法

hash(key)

三、hashmap putval方法

resize()

以下面的**為例(新增第乙個值):

實則為呼叫hashmap中的put方法

static final int hash(object key)
注釋:第一次新增值,table為null,所以tab也為null,第乙個if語句短路直接成立,從而成功為n賦值,此時需要解釋resize()的作用,而第二個if中tab[i=(r-1) & hash)]為在此儲存的位置,因為為第乙個值,所以一定是null,直接執行tab[i]--在此位置新增值。

此**冗雜,不需要完全看懂,只需要知道其執行的最終目的,找到return的地方,發現是用來返回newtab因此這行**的作用是為重新定義table為newtab,並且返回陣列長度為16並將其賦給n

final

node

resize()

elseif

((newcap

= oldcap

<< 1) <maximum_capacity

&& oldcap

>=default_initial_capacity

) newthr

= oldthr

<< 1;

// double threshold

}elseif

(oldthr

> 0)

// initial capacity was placed in threshold

newcap

= oldthr

;else

if

(newthr

== 0)

threshold

= newthr

; @suppresswarnings

() node

newtab

= (node)new

node[

newcap

]; table

= newtab

;if

(oldtab

!=null

)else

}while((e

= next

) !=null

);if

(lotail

!=null

)if

(hitail

!=null

) }

} }}return

newtab; }

詳述HashSet類add方法(一)

我們知道,add方法可以用來向集合中新增元素,對於hashset集合來說,不允許儲存重複的元素,當我們儲存元素的時候,集合會對新增進來的元素進行判斷是否重複,首先我們對新加元素進行分析 add方法原始碼 jdk 11.0.4 public boolean add e e 此時我們發現,返回值是乙個布...

詳述HashSet類add方法(二)

此時我們來分析當新增重複元素進hashset集合時的情況 原始碼如下 add方法 public boolean add e e put方法 public v put k key,v value hash 方法 static final inthash object key putval 方法 fin...

詳述HashSet類add方法(一)

詳述hashset類add方法 一 分析第一次新增資料的步驟 public class test2 1.呼叫hashset add 方法,原始碼如下 public boolean add e e 2.返回map.put 值,key為e,value值為present常量,方法原始碼如下 public ...