hashSet的add和contains的區別

2021-10-06 03:57:34 字數 618 閱讀 4021

hashset是基於hash表的資料結構,實際上使用的是hashmap的資料結構,hashset不保證結迭代順序,也不保證保證表中的元素順序隨著時間的變化,hashset允許包含乙個null值。由於hashset使用的是hashmap為底層的資料結構,那麼hashset也是執行緒非同步的。

新增指定元素

add元素時候是把將要存入的這個元素當做key值呼叫hashmap的put方法,放入hashmap中的,value放乙個空的物件。因此hashset,put元素的時間複雜度基本上是o(1),除了hash衝突。

當set中含有元素的時候,返回true

實際呼叫的是hashmap的containkey,hashmap中沒有contain放,hashmap中的方法叫做containkey,containskey(o)是根據hash函式去做雜湊的,所以與元素的多少無關,無論是多少元素containskey(o)的時間複雜度基本上o(1)。

作用不一樣,乙個是新增元素,乙個是判斷元素存不存在

都可以間接的判斷元素是不是存在set中

時間複雜度

contains直接用hash取值,時間複雜度可以理解為o(1)

add方法先判斷資料存不存在(直接定位),然後在新增,時間複雜度也可以理解為o(1)

詳述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 ...