Set中如何保證元素的唯一性

2021-08-22 14:31:48 字數 639 閱讀 4496

在set裡如果保證其中元素的唯一型:

我們來看看 set的乙個實現hashset中的add方法,hashset內部使用乙個hashmap來存放物件,

hashset把要儲存的物件做為其內部hashmap的key,如下:

//present為乙個輔助的object型物件

public boolean add(e o)

如果有兩個物件a,b, a.equals(b)返回ture,則

a和b只會有乙個被儲存在set中。

在hashmap中判斷兩個key相同的邏輯是 hashcode()相等並且 equals()返回true。

再看看hashmap中的put()

public v put(k key, v value) 

}modcount++;

addentry(hash, key, value, i);

return null;

}

剛好看到另外乙個帖子,

if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 中,只有hashcode相等時

才會呼叫後面的key.equals(k)

HashSet如何保證元素的唯一性

底層資料結構是雜湊表 元素是鍊錶的陣列 也就是說,保證元素的唯一性的第一層保證就是元素的hashcode。下面我們從原始碼的角度來分析 當我們向hashset中插入乙個元素的時候,發生了什麼。public hashset 這裡hashset的構造函式呼叫了hashmap,public class h...

HashSet保證元素唯一性

set儲存的資料是唯一性的,是通過儲存的物件的兩個方法進行唯一性判斷的hashcode 和equals 在呼叫集合的add e e 方法時,會進行判斷,通過e.hashcode 獲取要新增物件的hash值,和集合裡面的物件進行判斷,如果hash值不一樣,則會儲存。如果一樣,則會呼叫equals 方法...

HashMap如何保證集合元素的唯一性

hashmap如何保證集合元素的唯一性?為了更好的了解hashmap如何保證元素的唯一性,我們首先需要知道hashmap的底層結構 hashmap集合在jdk1.8之前底層是由陣列 鍊錶組成,jdk1.8之後是由陣列 鍊錶 紅黑樹組成。hashmap在使用put方法儲存元素時,會建立乙個初始大小為1...