hashset和hashmap有什麼關係

2022-09-03 20:54:16 字數 1769 閱讀 9245

1、hashset底層是採用hashmap實現的。hashset 的實現比較簡單,hashset 的絕大部分方法都是通過呼叫 hashmap 的方法來實現的,因此 hashset 和 hashmap 兩個集合在實現本質上是相同的。

2、hashmap的key就是放進hashset中物件,value是object型別的。

3、當呼叫hashset的add方法時,實際上是向hashmap中增加了一行(key-value對),該行的key就是向hashset增加的那個物件,該行的value就是乙個object型別的常量

hashset概述

hashset實現set介面,由雜湊表(實際上是乙個hashmap例項)支援。它不保證set 的迭代順序;特別是它不保證該順序恆久不變。此類允許使用null元素。

hashset的實現

如果不等,則新增到該陣列索引對應的鍊錶中。

set的實現類的集合物件中不能夠有重複元素,hashset也一樣他是使用了一種標識來確定元素的不重複,hashset用一種演算法來保證hashset中的元素是不重複的,   hashset採用雜湊演算法,底層用陣列儲存資料。預設初始化容量16,載入因子0.75

object類中的hashcode()的方法是所有子類都會繼承這個方法,這個方法會用hash演算法算出乙個hash(雜湊)碼值返回,hashset會用hash碼值去和陣列長度取模, 模(這個模就是物件要存放在陣列中的位置)相同時才會判斷陣列中的元素和要加入的物件的內容是否相同,如果不同才會新增進去。

hash演算法是一種雜湊演算法。

set hs=new hashset();

hs.add(o);

| o.hashcode();

| o%當前總容量 (0–15)

| | 不發生衝突

是否發生衝突—————–直接存放

| | 發生衝突

| 假(不相等)

o1.equals(o2)——————-找乙個空位新增

| | 是(相等)

不新增

覆蓋hashcode()方法的原則:

1、一定要讓那些我們認為相同的物件返回相同的hashcode值

2、盡量讓那些我們認為不同的物件返回不同的hashcode值,否則,就會增加衝突的概率。

3、盡量的讓hashcode值雜湊開(兩值用異或運算可使結果的範圍更廣)

hashset 的實現比較簡單,相關hashset的操作,基本上都是直接呼叫底層hashmap的相關方法來完成,我們應該為儲存到hashset中的物件覆蓋hashcode()和equals(),因為再將物件加入到hashset中時,會首先呼叫hashcode方法計算出物件的hash值,接著根據此hash值呼叫hashmap中的hash方法,得到的值& (length-1)得到該物件在hashmap的transient entry table中的儲存位置的索引,接著找到陣列中該索引位置儲存的物件,並呼叫equals方法比較這兩個物件是否相等,如果相等則不新增,注意:所以要存入hashset的集合物件中的自定義類必須覆蓋hashcode(),equals()兩個方法,才能保證集合中元素不重複。在覆蓋equals()和hashcode()方法時, 要使相同物件的hashcode()方法返回相同值,覆蓋equals()方法再判斷其內容。為了保證效率,所以在覆蓋hashcode()方法時, 也要盡量使不同物件盡量返回不同的hash碼值。

如果陣列中的元素和要加入的物件的hashcode()返回了相同的hash值(相同物件),才會用equals()方法來判斷兩個物件的內容是否相同。

HashMap和HashSet的區別

hashmap和hashset都是collection框架的一部分,它們讓我們能夠使用物件的集合。collection框架有自己的介面和實現,主要分為set介面,list介面和queue介面。它們有各自的特點,set的集合裡不允許物件有重複的值,list允許有重複,它對集合中的物件進行索引,queu...

hashset和hashmap的區別

map集合,就是有鍵值對的集合,屬性包含key,和value 1.關鍵字key是唯一不重複的 2.map是乙個有序的集合 hashset就像是把hashmap中value去掉 在jcf的所有具體類中,hashset是最簡單的乙個類,該類的例項代表一些唯一元素的普通集 1.無序 2.唯一 3.繼承ab...

hashMap 和 hashSet 的區別 ?

hashmap實現的是map介面 hashset實現的是set介面 hashmap是鍵對值儲存 hashset儲存的僅僅是值 hashmap使用put 存入資料 hashset使用add 存入資料 hashmap效率比較快,因為他是使用唯一的鍵來獲取物件 hashset相對於hashmap來說效率較...