HasMap和HashSet區別

HashSet是通過HasMap來實現的,HashMap的輸入參數有Key、Value兩個組成,在實現HashSet的時候,保持HashMap的Value爲常量,相當於在HashMap中只對Key對象進行處理。

HashMap的底層是一個數組結構,數組中的每一項對應了一個鏈表,這種結構稱“鏈表散列”的數據結構,即數組和鏈表的結合體;也叫散列表、哈希表。

一、HahMap存儲對象的過程如下

1、對HahMap的Key調用hashCode()方法,返回int值,即對應的hashCode;

2、把此hashCode作爲哈希表的索引,查找哈希表的相應位置,若當前位置內容爲NULL,則把hashMap的Key、Value包裝成Entry數組,放入當前位置;

3、若當前位置內容不爲空,則繼續查找當前索引處存放的鏈表,利用equals方法,找到Key相同的Entry數組,則用當前Value去替換舊的Value;

4、若未找到與當前Key值相同的對象,則把當前位置的鏈表後移(Entry數組持有一個指向下一個元素的引用),把新的Entry數組放到鏈表表頭;

二、HashSet存儲對象的過程

往HashSet添加元素的時候,HashSet會先調用元素的hashCode方法得到元素的哈希值 ,

然後通過元素 的哈希值經過移位等運算,就可以算出該元素在哈希表中 的存儲位置。

情況1: 如果算出元素存儲的位置目前沒有任何元素存儲,那麼該元素可以直接存儲到該位置上。

情況2: 如果算出該元素的存儲位置目前已經存在有其他的元素了,那麼會調用該元素的equals方法與該位置的元素再比較一次

,如果equals返回的是true,那麼該元素與這個位置上的元素就視爲重複元素,不允許添加,如果equals方法返回的是false,那麼該元素運行添加。

三、HashSet和HashMap的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章