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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hashCode()、equals()以及compareTo()方法的理解

發(fā)布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hashCode()、equals()以及compareTo()方法的理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文出自:http://blog.sina.com.cn/s/blog_50d936c40100nvzz.html

hashCode()、equals()以及compareTo()方法的理解

? 轉(zhuǎn)載

???判斷兩個對象是否相等(是同一個對象),首先調(diào)用hashCode()方法得到各自的hashcode,

1、如果hashcode不相等,則表明兩個對象不相等。

2、如果hashcode相等,繼續(xù)調(diào)用equals方法進(jìn)行判斷

??2.1:equals()返回true,則對象相等

??2.2:equals()返回fasle,兩對象不相等

所以,要求程序員在重寫hashCode方法時盡量做到:不一樣的對象,hashCode不一樣,這樣在判斷兩個對象是否是同一對象時可以提高效率。

根據(jù)這兩點(diǎn),我們可以看一道常見的JAVA面試題:

題目:對于兩個對象A、B,A.equals(B)==true,不一定有相同的hashCode(); 這句話是錯誤的。

當(dāng)然你自己定義的對象可以實(shí)現(xiàn)equals相同而hashCode不同(并不會報錯,不知道JAVA為什么不限死),但java的Object類中規(guī)定相同的對象一定要有相同的hashCode:原話如下:

Note that it is generally necessary to override the?hashCode?method whenever this method is overridden, so as to maintain the general contract for the?hashCode?method, which states that equal objects must have equal hash codes.

?

compareTo()方法和equals()方法的關(guān)系:

對于某些對象如集合(TreeSet)需要實(shí)現(xiàn)內(nèi)部排序,所以要實(shí)現(xiàn)Comparable接口,從而要實(shí)現(xiàn)里面的唯一方法compareTo();實(shí)現(xiàn)Comparable接口的對象表明遵循自然排序。從Comparable的API中可以看出:

?重寫compareTo()方法,不要求必須重寫equals()方法,但是卻強(qiáng)烈推薦重寫equals(),以使兩個方法的比較結(jié)果在邏輯上是一致。原話如下:

It is strongly recommended (though not required) that natural orderings be consistent with equals. This is so because sorted sets (and sorted maps) without explicit comparators behave "strangely" when they are used with elements (or keys) whose natural ordering is inconsistent with equals. In particular, such a sorted set (or sorted map) violates the general contract for set (or map), which is defined in terms of the?equals?method.

????所以在編寫需要用TreeSet添加的對象時,該對象一定要實(shí)現(xiàn)Comparable接口,并且重寫compareTo()方法,并推薦同時重寫equals()方法

總結(jié)

以上是生活随笔為你收集整理的hashCode()、equals()以及compareTo()方法的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。