Java中的Set與hashCode

我們知道Java中的Collection分爲List和Set。List中的元素是有序和可重複的,而Set中的元素無序且不可重複。


由於Set中的元素是不可重複的,在每次向一個Set中插入新的元素時,如果沒有hashCode,就需要遍歷整個集合檢查是否已經存在該元素。這樣會使Set的效率非常低下。

使用哈希算法可以提高從元素集合中查找一個元素的效率。根據集合元素的hashCode來將元素劃分成幾組,每一組對應一塊存儲區域。根據元素的hashCode可以找到該元素的存儲區域。


首先我們必須保證如果兩個元素相同(equals),它們的hashCode必定相同。

向一個Set集合插入新元素時,要通過元素的hashCode來確定這個元素存放的位置。如果這個位置上沒有元素,就直接存儲在這個位置上,否則就散列到其他地址。

因此在插入新元素時,我們只需與根據hashCode找到的存儲區域中的元素進行對比。這樣提高了Set插入元素的效率。


我們在重寫對象的equals方法時,必須重寫hashCode。

不使用Set的時候,大部分情況下我們並不需要關注hashCode。但是我們沒有理由不去重寫它。

因爲如果使用到了Set,在使用equals方法時,我們是使用hashCode來找到對應的存儲區域,然後再存儲區域中查找和對比。如果兩個元素的hashCode不同,它們很可能存儲在了不同的區域上,這樣它們就永遠不可能相等了。

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