在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...