hashCode是用于查找使用的,而equals是用于比較兩個(gè)對(duì)象的是否相等的。
以下這段話(huà)是從別人帖子回復(fù)拷貝過(guò)來(lái)的:
1.hashcode是用來(lái)查找的,如果你學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)就應(yīng)該知道,在查找和排序這一章有 例如內(nèi)存中有這樣的位置 0 1 2 3 4 5 6 7 而我有個(gè)類(lèi),這個(gè)類(lèi)有個(gè)字段叫ID,我要把這個(gè)類(lèi)存放在以上8個(gè)位置之一,如果不用hashcode而任意存放,那么當(dāng)查找時(shí)就需要到這八個(gè)位置里挨個(gè)去找,或者用二分法一類(lèi)的算法。 但如果用hashcode那就會(huì)使效率提高很多。 我們這個(gè)類(lèi)中有個(gè)字段叫ID,那么我們就定義我們的hashcode為ID%8,然后把我們的類(lèi)存放在取得得余數(shù)那個(gè)位置。比如我們的ID為9,9除8的余數(shù)為1,那么我們就把該類(lèi)存在1這個(gè)位置,如果ID是13,求得的余數(shù)是5,那么我們就把該類(lèi)放在5這個(gè)位置。這樣,以后在查找該類(lèi)時(shí)就可以通過(guò)ID除 8求余數(shù)直接找到存放的位置了。
2.但是如果兩個(gè)類(lèi)有相同的hashcode怎么辦那(我們假設(shè)上面的類(lèi)的ID不是唯一的),例如9除以8和17除以8的余數(shù)都是1,那么這是不是合法的,回答是:可以這樣。那么如何判斷呢?在這個(gè)時(shí)候就需要定義 equals了。 也就是說(shuō),我們先通過(guò) hashcode來(lái)判斷兩個(gè)類(lèi)是否存放某個(gè)桶里,但這個(gè)桶里可能有很多類(lèi),那么我們就需要再通過(guò) equals 來(lái)在這個(gè)桶里找到我們要的類(lèi)。 那么。重寫(xiě)了equals(),為什么還要重寫(xiě)hashCode()呢? 想想,你要在一個(gè)桶里找東西,你必須先要找到這個(gè)桶啊,你不通過(guò)重寫(xiě)hashcode()來(lái)找到桶,光重寫(xiě)equals()有什么用啊
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注