AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

面試官最愛的坑:為什么重寫equals時一定要重寫hashCode?

來源: 責編: 時間:2023-10-08 10:00:18 320觀看
導讀大家好,我是小米,歡迎大家來到我的微信公眾號!今天,我們將討論一個在Java開發中經常被問到的問題:“為什么在重寫 equals 方法時也要重寫 hashCode 方法?”這個問題可能在你的面試中經常出現,但它不僅僅是一個面試題,它還涉及

大家好,我是小米,歡迎大家來到我的微信公眾號!今天,我們將討論一個在Java開發中經常被問到的問題:“為什么在重寫 equals 方法時也要重寫 hashCode 方法?”這個問題可能在你的面試中經常出現,但它不僅僅是一個面試題,它還涉及到了Java中非常重要的概念,即對象的相等性和哈希碼。讓我們深入探討這個問題,并了解為什么它如此重要。ItJ28資訊網——每日最新資訊28at.com

equal 和 hashCode 是什么?

在Java中,每個對象都有一個默認的 equals 方法,它比較的是對象的引用是否相等,即比較兩個對象是否是同一個實例。但是,在實際開發中,我們通常需要比較對象的內容是否相等,而不僅僅是比較它們的引用。這就是為什么我們需要重寫 equals 方法的原因。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

哈希碼(hashCode)是另一個與對象相關的重要概念。哈希碼是一個整數值,它是根據對象的內容計算得出的。在Java中,哈希碼主要用于散列數據結構,如哈希表。哈希表是一種常用的數據結構,它可以快速查找存儲在其中的對象。哈希碼可以幫助我們確定對象在哈希表中的存儲位置,從而實現高效的查找操作。ItJ28資訊網——每日最新資訊28at.com

為什么要重寫 equals 方法?

默認情況下,Java中的 equals 方法比較的是對象的引用。如果我們不重寫 equals 方法,那么對于兩個不同的對象,即使它們的內容相同,調用 equals 方法也會返回 false,因為它們的引用不同。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

考慮以下示例:ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

圖片圖片ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

在這個示例中,盡管 person1 和 person2 的內容相同,但它們是不同的對象,因此 equals 方法返回 false。這顯然不是我們想要的行為。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

為了解決這個問題,我們需要重寫 equals 方法,以便比較對象的內容而不是引用。通常,我們會在自定義類中重寫 equals 方法,以實現我們自己的相等性邏輯,比較對象的屬性是否相等。ItJ28資訊網——每日最新資訊28at.com

為什么要重寫 hashCode 方法?

好了,現在我們知道了為什么要重寫 equals 方法,但是為什么還需要重寫 hashCode 方法呢?這是因為在使用散列數據結構時,比如哈希表,我們希望相等的對象具有相等的哈希碼。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

在Java中,哈希表使用哈希碼來確定存儲對象的位置。如果兩個相等的對象具有不同的哈希碼,那么它們將被存儲在哈希表的不同位置,導致無法正確查找這些對象。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

考慮以下示例:ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

圖片圖片ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

在這個示例中,盡管 person3 和 person4 的內容相同,但由于它們具有不同的哈希碼,set.contains(person4) 返回 false。這是因為哈希表無法正確定位到 person4。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

為了解決這個問題,我們需要確保重寫 equals 方法的對象也必須重寫 hashCode 方法,以便它們的哈希碼是相等的。這樣,哈希表就能夠正確地存儲和查找這些對象了。ItJ28資訊網——每日最新資訊28at.com

重寫 hashCode 方法的規則

那么,如何正確地重寫 hashCode 方法呢?Java對于 hashCode 方法有一些規定,這些規定確保了哈希碼的一致性和性能。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

以下是一些重寫 hashCode 方法的規則:ItJ28資訊網——每日最新資訊28at.com

  • 如果兩個對象通過 equals 方法相等,那么它們的哈希碼必須相等。
  • hashCode 方法的計算應該是高效的,避免復雜的計算。
  • hashCode 方法的結果應該在對象的生命周期內保持不變。如果一個對象的內容發生了變化,它的哈希碼也應該保持不變。
  • 對于不相等的對象,哈希碼盡量不要相等,以提高哈希表的性能。

ItJ28資訊網——每日最新資訊28at.com

為了遵守這些規則,通常我們可以使用對象的屬性來計算哈希碼,比如使用屬性的哈希碼相加或異或來得到對象的哈希碼。ItJ28資訊網——每日最新資訊28at.com

示例:重寫 equals 和 hashCode 方法

讓我們來看一個示例,如何重寫 equals 和 hashCode 方法:ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

圖片圖片ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

在這個示例中,我們重寫了 equals 方法,比較了 name 和 age 屬性是否相等,然后重寫了 hashCode 方法,使用了 Objects.hash 方法來計算哈希碼。ItJ28資訊網——每日最新資訊28at.com

END

為了保證對象的相等性和哈希表的正確性,我們需要在重寫 equals 方法時也重寫 hashCode 方法。這兩個方法是密切相關的,它們一起確保對象在使用散列數據結構時能夠正確工作。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

當你在面試中遇到這個問題時,不要忘記強調 equals 和 hashCode 方法的一致性和性能,以及遵守重寫 hashCode 方法的規則。這將幫助你深刻理解這個重要的概念,并在實際開發中正確地使用它們。ItJ28資訊網——每日最新資訊28at.com

ItJ28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-12458-0.html面試官最愛的坑:為什么重寫equals時一定要重寫hashCode?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 服務、網關、NGINX 這些負載均衡都解決哪些問題?

下一篇: 優化制造業供應鏈的七大技術前沿解決方案

標簽:
  • 熱門焦點
  • 俄羅斯:將審查iPhone等外國公司設備 保數據安全

    iPhone和特斯拉都屬于在各自領域領頭羊的品牌,推出的產品也也都是數一數二的,但對于一些國家而言,它們的產品可靠性和安全性還是在限制范圍內。近日,俄羅斯聯邦通信、信息技術
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產品也出現了歷史低價,那么各個價位段的產品性價比
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • 華為HarmonyOS 4升級計劃公布:首批34款機型今日開啟公測

    8月4日消息,今天下午華為正式發布了HarmonyOS 4系統,在更流暢的前提下,還帶來了不少新功能,UI設計也有變化,會讓手機煥然一新。華為宣布,首批機型將會在
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現場,成為了展會的一大看點。這也是三翼鳥繼9月9日發布了行業首個一站式定制智慧家平臺后的
Top