JavaEE 第八週

Hash Code 和 Equals 的學習筆記html

一. Definition程序員

     1)什麼是Hash Code?學習

     hash code是一種編碼方式,在Java中,每一個對象都會有一個hashcode,Java能夠經過這個hashcode來識別一個對象。至於hashcode的具體編碼方式,比較複雜(事實上這個編碼是能夠由程序員經過繼承和接口的實現重寫的)。編碼

     用最簡單的方法來講,hashcode就是一個簽名。當兩個對象的hashcode同樣時,兩個對象就有可能同樣。若是不同的話兩個對象就確定不同。 通常用hashcode來進行比較兩個東西是否是同樣的,能夠很容易的排除許多不同的東西。 最經常使用的地方就是在一堆東西里找一個東西。先用你要找的東西的hashcode和全部東西的hashcode比較,若是不同的話就確定不是你要找的東西。若是同樣的話就極可能是你要找的東西。而後再進行仔細的比較兩個東西是否是真的如出一轍。spa

      2)什麼是Equals?code

      equals() 方法用於將字符串與指定的對象比較。htm

      這個方法首先比較的是兩個對象的地址是否相同,若是相同直接返回true,不然, 對象

         (1)若是是string類型的先比較是不是string類型,是的話,再比較是否長度相同,相同的話再比較,每一個字符是否相同;blog

   (2)判斷兩個對象是不是同一個類加載器加載的,不是則返回false;繼承

   (3)若是是普通對象則將對象的屬性放入hashmap中做爲key, 屬性中的值做爲value,以此做爲比較的方式。

二.  Feature:

      1)Hash code

       關於hashCode方法,一致的約定是:

       重寫了euqls方法的對象必須同時重寫hashCode()方法。

       若是2個對象經過equals調用後返回是true,那麼這個2個對象的hashCode方法也必須返回一樣的int型散列碼

       若是2個對象經過equals返回false,他們的hashCode返回的值容許相同。(然而,程序員必須意識到,hashCode返回獨一無二的散列碼,會讓存儲這個對象的hashtables更好地工做。

      2)Equals

       按照約定,equals要知足如下規則。

 

        自反性:  x.equals(x) 必定是true

 

        對null:  x.equals(null) 必定是false

 

        對稱性:  x.equals(y)  和  y.equals(x)結果一致

 

        傳遞性:  a 和 b equals , b 和 c  equals,那麼 a 和 c也必定equals。

 

        一致性:  在某個運行時期間,2個對象的狀態的改變不會不影響equals的決策結果,那麼,在這個運行時期間,不管調用多少次equals,都返回相同的結果。

 

 三. Relationship

 

       一、equals方法用於比較對象的內容是否相等(覆蓋之後);

 

       二、hashcode方法只有在集合中用到;

 

       三、當覆蓋了equals方法時,比較對象是否相等將經過覆蓋後的equals方法進行比較(判斷對象的內容是否相等);

 

       四、將對象放入到集合中時,首先判斷要放入對象的hashcode值與集合中的任意一個元素的hashcode值是否相等,若是不相等直接將該對象放入集合中。若是hashcode值相等,而後再經過equals方法判斷要放入對象與集合中的任意一個對象是否相等,若是equals判斷不相等,直接將該元素放入到集合中,不然不放入。

摘自:https://www.cnblogs.com/lulipro/p/5628750.html

         https://www.cnblogs.com/wangnuo/p/7744891.html

         https://www.cnblogs.com/keyi/p/7119825.html

相關文章
相關標籤/搜索