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 方法...