日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java equal hashcode_Java(二)equal 和 hashcode使用

發布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java equal hashcode_Java(二)equal 和 hashcode使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、hashCode()和equals()是什么?

hashCode()方法和equals()方法的作用其實一樣,在Java里都是用來對比兩個對象是否相等一致。

Equal

沒有重寫的equal 使用是繼承自 Object 的 equal 方法,和 “==” 的作用一樣, 比較兩個對象的內存地址是否相等。

public boolean equals(Object obj) {

return (this == obj);

}

重寫過的 equal, 比較的是兩個對象的屬性變量值 是否相等。

HashCode

hashCode是對象在內存地址通過hash算法得到的哈希碼。

二、hashCode()和equals()的區別

下邊從兩個角度介紹了他們的區別:一個是性能,一個是可靠性。他們之間的主要區別也基本體現在這里。

1、equals()既然已經能實現對比的功能了,為什么還要hashCode()呢?

因為重寫的equals()里一般比較的比較全面比較復雜,這樣效率就比較低,而利用hashCode()進行對比,則只要生成一個hash值進行比較就可以了,效率很高。

2、hashCode()既然效率這么高為什么還要equals()呢?

因為hashCode()并不是完全可靠,有時候不同的對象他們生成的hashcode也會一樣(生成hash值得公式可能存在的問題),所以hashCode()只能說是大部分時候可靠,并不是絕對可靠,所以我們可以得出(PS:以下兩條結論是重點,很多人面試的時候都說不出來):

equals()相等的兩個對象他們的hashCode()肯定相等,也就是用equals()對比是絕對可靠的。

hashCode()相等的兩個對象他們的equals()不一定相等,也就是hashCode()不是絕對可靠的。

三、hashCode()和equals()使用的注意事項

1、對于需要大量并且快速的對比的話如果都用equals()去做顯然效率太低,所以解決方式是,每當需要對比的時候,首先用hashCode()去對比,如果hashCode()不一樣,則表示這兩個對象肯定不相等(也就是不必再用equals()去再對比

了),如果hashCode()相同,此時再對比他們的equals(),如果equals()也相同,則表示這兩個對象是真的相同了,這樣既能大大提高了效率也保證了對比的絕對正確性!

2、這種大量的并且快速的對象對比一般使用的hash容器中,比如HashSet,HashMap,HashTable等等,比如HashSet里要求對象不能重復,則他內部必然要對添加進去的每個對象進行對比,而他的對比規則就是像上面說的那樣,先hashCode(),如果hashCode()相同,再用equals()驗證,如果hashCode()都不同,則肯定不同,這樣對比的效率就很高了。

3、然而hashCode()和equals()一樣都是基本類Object里的方法,而和equals()一樣,Object里hashCode()里面只是返回當前對象的地址,如果是這樣的話,那么我們相同的一個類,new兩個對象,由于他們在內存里的地址不同,則他們的

hashCode()不同,所以這顯然不是我們想要的,所以我們必須重寫我們類的hashCode()方法,即一個類,在hashCode()里面返回唯一的一個hash值,比如下面:

由于標識這個類的是他的內部的變量num和name,所以我們就根據他們返回一個hash值,作為這個類的唯一hash值。

所以如果我們的對象要想放進hashSet,并且發揮hashSet的特性(即不包含一樣的對象),則我們就要重寫我們類的hashCode()和equals()方法了。像String,Integer等這種類內部都已經重寫了這兩個方法。

當然如果我們只是平時想對比兩個對象 是否一致,則只重寫一個equals(),然后利用equals()去對比也行的

4、什么時候需要重寫?

一般的地方不需要重載hashCode,只有當類需要放在HashTable、HashMap、HashSet等等hash結構的集合時才會重載hashCode。

5、那么為什么要重載hashCode呢?

如果你重寫了equals,比如說是基于對象的內容實現的,而保留hashCode的實現不變,那么很可能某兩個對象明明是“相等”,而hashCode卻不一樣。

這樣,當你用其中的一個作為鍵保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一個作為鍵值去查找他們的時候,則根本找不到。

6、為什么equals()相等,hashCode就一定要相等,而hashCode相等,卻不要求equals相等?

因為是按照hashCode來訪問小內存塊,所以hashCode必須相等。

HashMap獲取一個對象是比較key的hashCode相等和equals為true。

之所以hashCode相等,卻可以equal不等,就比如ObjectA和ObjectB他們都有屬性name,那么hashCode都以name計算,所以hashCode一樣,但是兩個對象屬于不同類型,所以equals為false。

7、為什么需要hashCode?

通過hashCode可以很快的查到小內存塊。

通過hashCode比較比equals方法快,當get時先比較hashCode,如果hashCode不同,直接返回false。

------------------------------------------

總結

以上是生活随笔為你收集整理的java equal hashcode_Java(二)equal 和 hashcode使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91精品国产综合久久久久久 | 啪啪的网站 | 亚洲精品视频三区 | 亚洲一区二区av在线 | 中文字幕在线2021 | 欧美区视频| 午夜精品久久久久久久久久久 | 国产一级高清 | 午夜成人影视 | 成人蜜桃视频 | 免费福利影院 | 国产亚洲精品女人久久久久久 | 天堂av电影在线观看 | 91视频www| 亚洲午夜精品一区 | 麻豆精品在线观看 | 四虎精品一区二区三区 | 亚洲精品国产欧美在线观看 | 国产精品乱码久久久久久 | 日本丰满大乳奶做爰 | 偷拍视频一区 | 日韩精品在线视频观看 | 欧美色图13p | 国产精品久久久久久久一区二区 | 国产免费av观看 | 欧洲精品视频在线观看 | 欧美成人片在线 | 99爱爱视频 | 久草一区 | 日韩三级理论 | 亚洲日本中文字幕 | 刘亦菲毛片 | 国产模特av私拍大尺度 | 中文字幕欧美在线 | 俄罗斯美女一级爱片 | 娇妻玩4p被三个男人伺候电影 | 在线国产网站 | 日韩美女视频19 | 精品黑人一区二区三区在线观看 | 国产91丝袜在线播放九色 | 亚洲欧美自拍一区 | 神马久久网站 | xxx精品| 免费在线看污 | 亚洲国产精品狼友在线观看 | 亚洲人免费 | 极品色影视| 亚洲人成无码网站久久99热国产 | 日本黄色片免费看 | 4hu最新网址 | 影音先锋成人资源网 | aa免费视频 | 亚洲精品香蕉 | 永久免费,视频 | 337p日本欧洲亚洲大胆精筑 | 黄色三级免费观看 | 国产成人无码精品久久久久久 | 日韩在线观看免费高清 | 亚洲一区a| 国产一线二线三线在线观看 | 精品国产乱码久久久久久图片 | 激情午夜视频 | av有码在线观看 | 一级视频在线播放 | 波多野结衣操 | 欧美人性生活视频 | 国精品人妻无码一区二区三区喝尿 | 综合天天| www.96av| www.色视频| 色欧美88888久久久久久影院 | 欧美一区二区久久久 | 女人私密又肥又大 | 日韩有码中文字幕在线观看 | 给我免费观看片在线电影的 | 国产日韩欧美精品在线观看 | 久久99伊人 | 强行糟蹋人妻hd中文字幕 | 超碰av人人 | www日本com | 亚洲精品成人无码毛片 | 理论片一区 | 国产鲁鲁视频在线观看特色 | 成年人性生活视频 | 久久久久一区二区三区四区 | 天天插夜夜操 | 性生活在线视频 | 男男做爰猛烈啪啪高 | 欧美日韩色 | 欧美日韩18 | 美女视频一区二区 | 午夜爽视频 | 国产剧情精品在线 | 成人禁污污啪啪入口 | www.色悠悠| 在线免费看mv的网站入口 | 一级免费a| 欧美一区二区三区婷婷 | 国产黑丝一区二区 |