對(duì)象的 hashCode() 方法霞掺,為對(duì)象返回一個(gè) 哈希值爪瓜。那什么是 哈希值 ?
這個(gè)詞的解釋有很多掰派。
哈希值是數(shù)據(jù)的摘要乌庶。(什么是摘要叶摄?看電影的時(shí)候都看過(guò)劇情簡(jiǎn)介吧?這就是摘要安拟。比如你大致聽完一段介紹蛤吓,你就可以判斷這部電影你看過(guò)沒(méi)有。)我覺(jué)得用摘要很形象糠赦。我看到這個(gè)詞時(shí)一下明白了哈希的作用会傲。
哈希值是將任意長(zhǎng)度的數(shù)據(jù)映射到有限長(zhǎng)度的域上。直觀解釋起來(lái)拙泽,就是對(duì)一串?dāng)?shù)據(jù)m進(jìn)行雜糅淌山,輸出另一段固定長(zhǎng)度的數(shù)據(jù)h,作為這段數(shù)據(jù)的特征(指紋)顾瞻。
將一定長(zhǎng)度的數(shù)據(jù)進(jìn)行有損壓縮泼疑,就能得到固定長(zhǎng)度的哈希值,這個(gè)哈希值保留了原數(shù)據(jù)的一部分信息荷荤,把這種壓縮算法稱之為哈希算法退渗。
既然說(shuō)哈希值是數(shù)據(jù)的摘要移稳,那么要盡可能保證這個(gè)摘要的準(zhǔn)確性,相似的數(shù)據(jù)他們的哈希值要盡量不同会油。所以哈希算法有兩個(gè)要求:
抗碰撞能力:對(duì)于任意兩個(gè)不同的數(shù)據(jù)塊个粱,其hash值相同的可能性極小翻翩;對(duì)于一個(gè)給定的數(shù)據(jù)塊都许,找到和它hash值相同的數(shù)據(jù)塊極為困難。
抗篡改能力:對(duì)于一個(gè)數(shù)據(jù)塊嫂冻,哪怕只改動(dòng)其一個(gè)比特位胶征,其hash值的改動(dòng)也會(huì)非常大。
那么數(shù)據(jù)和哈希有什么樣的對(duì)應(yīng)關(guān)系呢桨仿?
根據(jù)哈希值1可以知道元數(shù)據(jù) 要么是 數(shù)據(jù)1 要么是 數(shù)據(jù)2弧烤,但是反過(guò)來(lái),相同的數(shù)據(jù)必定得到相等的哈希蹬敲。
理解了哈希的概念,在來(lái)理解對(duì)象的哈希值莺戒,對(duì)象其實(shí)是對(duì)數(shù)據(jù)的封裝伴嗡,如果兩個(gè)對(duì)象封裝的數(shù)據(jù)相同(即equals=true)那么他們應(yīng)該具有相等的哈希值。如果兩個(gè)對(duì)象封裝的數(shù)據(jù)不同(equlas=false)那么他們可以具有相同的哈希值从铲。但是為了哈希的抗碰撞能力瘪校,實(shí)現(xiàn)時(shí)應(yīng)盡量保證他們的不等。