歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java中的Set與hashCode

Java中的Set與hashCode

日期:2017/3/1 10:09:29   编辑:Linux編程

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

Copyright © Linux教程網 All Rights Reserved