面試題15——hashCode和equals方法的區別與聯絡
hashCode和equals方法的區別:
1.equal()相等的兩個物件他們的hashCode()肯定相等,也就是用equal()對比是絕對可靠的。
2.hashCode()相等的兩個物件他們的equal()不一定相等,也就是hashCode()不是絕對可靠的。
因為重寫的equal()裡一般比較的比較全面比較複雜,這樣效率就比較低,而利用hashCode()進行對比,則只要生成一個hash值進行比較就可以了,效率很高,那麼hashCode()既然效率這麼高為什麼還要equal()呢?
因為hashCode()並不是完全可靠,有時候不同的物件他們生成的hashcode也會一樣(生成hash值得公式可能存在的問題),所以hashCode()只能說是大部分時候可靠,並不是絕對可靠。
解決方式:
當需要對比的時候,首先用hashCode()去對比,如果hashCode()不一樣,則表示這兩個物件肯定不相等(也就是不必再用equal()去再對比了),如果hashCode()相同,此時再對比他們的equal(),如果equal()也相同,則表示這兩個物件是真的相同了,這樣既能大大提高了效率也保證了對比的絕對正確性。
相關推薦
面試題15——hashCode和equals方法的區別與聯絡
hashCode和equals方法的區別: 1.equal()相等的兩個物件他們的hashCode()肯定相等,也就是用equal()對比是絕對可靠的。 2.hashCode()相等的兩個物件他們的equal()不一定相等,也就是hashCode()不是絕對可靠的。
java面試題之sleep()和wait()方法的區別
sleep方法: 屬於Thread類中的方法;會導致程式暫停執行指定的時間,讓出cpu該其他執行緒,但是他的監控狀態依然保持著,當指定時間到了之後,又會自動恢復執行狀態;在呼叫sleep方法的過程中,執行緒不會釋放物件鎖。 wait方法: 屬於Object類中的方法;在呼叫wait方法的時候,執
java為什麽要重寫hashCode和equals方法?
有時 不同 遞歸 步驟 原生 下標 set .com 底層 如果不被重寫(原生)的hashCode和equals是什麽樣的? 不被重寫(原生)的hashCode值是根據內存地址換算出來的一個值。 不被重寫(原生)的equals方法是嚴格判斷一個對象
理解Java中的hashCode和equals 方法
err array size tex nat 什麽 map 交流群 培訓 在Java裏面所有的類都直接或者間接的繼承了java.lang.Object類,Object類裏面提供了11個方法,如下: Java代碼 ```` 1,clone() 2,equals(Obje
java面試題之int和Integer的區別
4條 試題 als 自動 數據類型 類型 fort spec 新建 int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本數據類型 2、Integer變量必須實例化後才能使用,而int變量不需要 3、Integer實際是對象的引用,
python3 開發面試題(%s和format的區別)5.31
什麽 字符 color 對象屬性 pri arguments 坐標 保留兩位小數 面試題 在格式化字符串中有兩種方法: 1、%s 2、format 大家常用的是哪一種方法?為什麽要用你選的這種方法? 我們先看一個例子: 首先我們定義一個我軍需要擊殺的恐怖分
hashcode()和equals()的區別
tab aci 人員 over 一個 body this hashcode 出現一次 Java的基類Object提供了一些方法,其中equals()方法用於判斷兩個對象是否相等,hashCode()方法用於計算對象的哈希碼。equals()和hashCode()都不是fin
Java重寫hashCode()和equals()方法
哈希 strong tag main 實現 sta 位置 rgs out 1. hashCode 1.1 基本概念 hashCode是JDK根據對象的地址算出來的一個int數字(對象的哈希碼值),代表了該對象再內存中的存儲位置。 hashCode()方法是超級類Ob
java中正確使用hashCode和equals方法
Java 中正確使用 hashCode 和 equals 方法 轉載自:[開源中國社](http://www.oschina.net/question/82993_75533) 在這篇文章中,我將告訴大家我對hashCo
hashCode和equals方法的重寫
我們都知道,在JAVA世界中,萬物皆物件。而equals和hashCode這兩個方法也在Object類裡被定義,先來看這兩個方法在Object裡面是如何實現的: 先看equals方法: public boolean equals(Object obj) { return (t
重寫hashcode和equals方法,以及加入treeset實現comparable介面重寫compareTo方法
package Interview; import java.util.*; class People implements Comparable<People> { public String name; public int age; public People(Str
Java 中hashCode()和equals()方法
Java中,涉及到兩個物件的比較時,我們會用到hashCode()和equals()。這兩個方法是Object類中定義的方法。 1. api中的描述 (1)hashCode() hashCode()方法給物件返回一個hash code值。這個方法被用於hash tables,
從解析String的hashCode和equals方法原始碼到hash衝突
經常被問到hashcode方法和equals方法還有== ,網上都有結論,但我們不能知其然卻不知其所以然。所以我們從string的hashcode和equals入手,探究這3者,先貼原始碼。 public int hashCode() { int h = hash;
HashCode()和equals()方法詳解
這兩個方法的問題一直困擾了我很久。不清楚他們各自的用處和實現,記得在實習的時候遇到過一個問題:將自定義的物件放在一個set集合中,目的是篩選出不重複的物件集合,但是結果卻是錯誤的。比如說有10個物件,但是其中有兩個是相等的,那麼期望的set的大小應該是9,但是最終結果卻是10。讓我很奇怪,後來帶我的
面試題3——sizeof和strlen的區別
sizeof和strlen有如下區別: (1)sizeof是一個操作符,strlen是庫函式; (2)sizeof的引數可以是資料的型別,也可以是變數,而strlen只能以結尾為’\0’的字串做引數; (3)編譯器在編譯時就計算出了sizeof的結果。而strlen函式必須在執行時才能計算出
JAVA hashCode和equals方法詳解
hashCode和equals方法都是Object基類的方法 先看一個例子 public class Studeng { private Integer sid; private String name; public
淺談hashcode()和equals()方法
Java Object 類中存在hashcode()方法以及equals方法 public native int hashCode(); public boolean equals(Object obj) { return (this == obj); }
面試題5.Cookie和session的區別
1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。 2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙 考慮到安全應當使用session。 3、session會在一定時間內儲存在伺服器上。當訪問增多,會比
為什麼要重寫hashcode()和equals()方法
以JDK1.8原始碼詳解。 一、Object類的hashcode和equals方法 equals方法原始碼: /** * Indicates whether some other object is "equal to" this one. * <p
java為什麼要重寫hashCode和equals方法
如果不被重寫(原生)的hashCode和equals是什麼樣的? 不被重寫(原生)的hashCode值是根據記憶體地址換算出來的一個值。 不被重寫(原生)的equals方法是嚴格判斷一個物件是否相等的方法(object1 == object2)。