java 深入淺出HashCode

2021-06-21 00:42:44 字數 1131 閱讀 9188

首先hashcode, 大家都知道是雜湊碼。 但是大部分描述都太抽象了,所以我把自己的理解寫在下面。

主要是讓大家形象的理解什麼叫物件相等hashcode一定相等,hashcode相等物件不一定相等 (前提是要在沒有重寫equals方法)。

hashcode是通過位址值啊之類的通過某種演算法算出來的,假設 hashcode=address+value,可以看到下面的物件a,和b, 他們的hashcode是相等,但是物件完全不同,

所以說hashcode相等物件不一定相等.

object

address ---->     value

hashcode

a001---->1,35b

002---->1,25

如果物件是相等的, 如下,那麼他們的hashcode一定相等。

object

address--->value

hashcode

a001---->1,35b

001---->1,35

那為什麼重寫了equals方法以後,即使兩個物件相等了,但hashcode不一定等呢?

如下, 我們在物件裡面重寫equals 的時候往往是讓判斷兩個物件裡面的屬性值是不是相等,1=1,3=3那麼我們就說這兩個物件euqals相等,但是你要注意到api裡面的hashcode演算法需要算上位址值之類的東西,所以當你自定義下面a和b相等的時候,hashcode就不等了,因此你可以覆蓋hashcode這個方法,演算法裡面不要加上位址值,也就是說你新寫的hashcode只等於1+3.  那麼就符合規範了。

object

address--->value

hashcode

a001---->1,35b

002---->1,36

hashcode,不一定要重寫,如果你只是比較兩個物件的話。 但當你要把物件作為key放到hashmap或其他list中,一定要重寫hashcode.

因為,在判斷key重複的時候為了增加效率會先比較hashcode,在比較物件的value。如果你hashcode都不等了,那麼物件一定不相等,所以就不會去調equals方法。

但是如上面所說, 你重寫了equals方法, 不想讓重複的物件作放到key中, 所以你得重寫hashcode,以避免明明是相等的物件,但卻有重複的key出現。

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...

深入淺出ShellExecute

深入淺出shellexecute譯者 徐景周 原作 nishant s q 如何開啟乙個應用程式?shellexecute this m hwnd,open calc.exe sw show 或shellexecute this m hwnd,open notepad.exe c mylog.log...