Set集合是如何保證元素不重複

2021-10-01 11:22:27 字數 547 閱讀 9484

在使用集合的時候,會經常用到set集合,set集合的特點如下:

1,元素無序

2,元素不可重複

那麼set集合底層是如何保證元素無序的呢?

1,在往set集合中新增物件的時候,首先會通過該物件的hashcode方法計算該物件的hash值。

2,將計算出來的hash值去hash表中查詢,如果hash表中不存在該值,則物件新增成功。如果hash表中有該hash值,那麼還會將要新增的物件和集合中的物件進行進一步的比較,使用物件的equals方法比較物件的field,如果field也相同,則是重複的物件,該物件新增失敗。如果equals返回的是false,則說明兩個物件不是同乙個物件。則該物件就會新增到已有物件鍊錶的末尾。該種情況稱為hash碰撞。

set集合是通過hashcode和equals方法來保證元素不可重複的。之所以先計算hashcode,是為了提高新增的效率。所以當自定義物件需要儲存到set集合中的時候,就需要重寫以上兩個方法。

重寫hashcode方法時的原則:

保證同乙個物件返回的hash值相同。

不同物件計算出來的hash值不同。

HashSet 如何保證元素不重複 hash碼

hashset 不重複主要add 方法實現,使用 add 方法找到是否存在元素,存在就不新增,不存在就新增。hashset 主要是基於hashmap 實現的,hashmap 的key就是 hashset 的元素,hashset 基於hash 函式實現元素不重複。首先看 add 方法 public b...

HashSet如何保證元素不重複 面試必問

目錄 hashset 實現了 set 介面,由雜湊表 實際是 hashmap 提供支援。hashset 不保證集合的迭代順序,但允許插入 null 值。也就是說 hashset 不能保證元素插入順序和迭代順序相同。hashset 具備去重的特性,也就是說它可以將集合中的重複元素自動過濾掉,保證儲存在...

Set 怎麼保證不重複

因為map中的key是不允許重複的,所以set中的元素不能重複。hashmap的往裡放元素的原始碼!public v put k key,v value modcount addentry hash,key,value,i return null 分步驟判斷新增的key值 1 取到新新增key值得h...