我們知道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不同,它們很可能存儲在了不同的區域上,這樣它們就永遠不可能相等了。