Set集合元素的唯一性

2021-10-24 11:43:38 字數 1256 閱讀 1414

hashset實現 set

介面,所以hashset保證元素唯一性的做法與set的做法一致,下面用hashset為例子來說明set集合是如何確保元素的唯一性的。

public static void main(string args)

輸出的結果為:[1, 2, 3]

從上面這段**可以看到,這裡往integer型別的hashset裡面新增了四個值,其中兩個值是相同的,而這個相同的值只有乙個成功的新增了進去。不難發現,hashset內部已經實現了去重的操作。下面用hashset儲存自定義物件的例子來說明set集合保證元素唯一性的原理。

定義乙個dog類作為hashset的型別

public class dog 

@override

public string tostring()

}

public static void main(string args)

輸出的結果為:4

[dog(name:black age:4),dog(name:yellow age:3), dog(name:green age:2), dog(name:green age:2)]

從輸出的結果可以發現,hashset儲存自定義物件並沒有去重的操作,而我們用hashset來儲存資料有一部分的原因就是看上了它能去重。想讓它能去重其實並不難,set集合元素的唯一性是靠所儲存元素型別是否重寫hashcode()和equals()方法來保證的,所以我們在dog類中重寫這兩個方法就能實現去重。

public class dog 

@override

public string tostring()

@override

public int hashcode()

@override

public boolean equals(object obj)

}

輸出的結果為:3

[dog(name:yellow age:3), dog(name:black age:4), dog(name:green age:2)]

從輸出的結果可以知道,hashset儲存自定義物件可以進行去重了。關鍵在於重寫hashcode()和equals()方法,可能有人會問,為什麼要同時重寫這兩個方法?原因是在程式執行時,是先判斷兩個物件的hash值,只有在hash值相同的時候才會呼叫equals()來進行比較。

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

在set裡如果保證其中元素的唯一型 我們來看看 set的乙個實現hashset中的add方法,hashset內部使用乙個hashmap來存放物件,hashset把要儲存的物件做為其內部hashmap的key,如下 present為乙個輔助的object型物件 public boolean add e...

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

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

HashSet保證元素唯一性

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