hashCode()方法對於HashSet是不是十分重要

quentain發表於2015-09-14

hash(也被翻譯為雜湊、雜湊)演算法的功能是,它能保證快速查詢被檢索的物件,hash演算法的價值在於速度。當需要查詢集合中某個元素時,hash演算法可以直接根據該元素的hashCode值計算出該元素的儲存位置,從而快速定位該元素。為了理解這個概念,可以先看陣列(陣列是所有能儲存一組元素裡最快的資料結構)。陣列可以包含多個元素,每個元素都有索引,如果需要訪問某個陣列元素,只需提供該元素的索引,接下來即可根據該索引計算該元素在記憶體裡的儲存位置。

        表面上看起來,HashSet集合裡的元素都沒有索引,實際上當程式向HashSet集合中新增元素時,HashSet會根據該元素的hashCode值來計算它的儲存位置,這樣也可快速定位該元素。

 為什麼不直接使用陣列、還需要使用HashSet呢?因為陣列元素的索引是連續的,而且陣列的長度是固定的,無法自由增加陣列的長度。而HashSet就不一樣了,HashSet採用每個元素的hashCode值來計算其儲存位置,從而可以自由增加HashSet的長度,並可以根據元素的hashCode值來訪問元素。因此,當從HashSet中訪問元素時,HashSet先計算該元素的hashCode值(也就是呼叫該物件的hashCode()方法的返回值),然後直接到改hashCode值對應的位置去取出該元素——這就是HashSet速度很快的原因。

相關文章