hashcode()是幹什麼用的?2023年09月29日 星期一 07:32 p.m.首先hashcode是雜湊演算法的一中簡單實現,他是乙個物件的雜湊嗎值。一般和equals一起使用。
hashcode也是用來查詢的,如果你學過資料結構就應該知道,在查詢和排序這一章有
例如記憶體中有這樣的位置
0 1 2 3 4 5 6 7
而我有個類,這個類有個字段叫id,我要把這個類存放在以上8個位置之一,如果不用hashcode而任意存放,那麼當查詢時就需要到這八個位置裡挨個去找,或者用二分法一類的演算法。
但如果用hashcode那就會使效率提高很多。
我們這個類中有個字段叫id,那麼我們就定義我們的hashcode為id%8,然後把我們的類存放在取得得餘數那個位置。比如我們的id為9,9除8的餘數為1,那麼我們就把該類存在1這個位置,如果id是13,求得的餘數是5,那麼我們就把該類放在5這個位置。這樣,以後在查詢該類時就可以通過id除8求餘數直接找到存放的位置了。
2.但是如果兩個類有相同的hashcode怎麼辦那(我們假設上面的類的id不是唯一的),例如9除以8和17除以8的餘數都是1,那麼這是不是合法的,回答是:可以這樣。那麼如何判斷呢?在這個時候就需要定義 equals了。
也就是說,我們先通過 hashcode來判斷兩個類是否存放某個桶裡,但這個桶裡可能有很多類,那麼我們就需要再通過 equals 來在這個桶裡找到我們要的類。
那麼。重寫了equals(),為什麼還要重寫hashcode()呢?
想想,你要在乙個桶裡找東西,你必須先要找到這個桶啊,你不通過重寫hashcode()來找到桶,光重寫equals()有什麼用啊
3。你要對a類排序,有兩種方法,一種就是讓a類實現comparabole結構並實現compareto()方法,那麼可以通過collections.sort(list list)對其進行排序
另一種方法:自己定義乙個類b實現comparator類並實現compare方法,
然後通過collections.sort(list list,b b)進行排序
JAVA中hashCode的編寫
1 把某個非零常數值,比如17,儲存在乙個叫result的int型別的變數中。2 對於物件中的關鍵域f 指equals方法中考慮的每乙個域 完成以下步驟 a 為該域計算int型別的雜湊碼c i 如果該域是boolean型別,則計算 f 0 1 ii 如果該域是byte char short或者int...
Java中的hashcode方法
參考與學習 旨在通過這篇文章把現在我明白的 未來我可能忘記的以及混淆的,寫清楚。hashcode方法 該方法定義在object類中,是native方法 哦我去 其他囉嗦的我不想寫了 不懂直接去看上面兩篇部落格 果然!點一 equals與 的關係和區別 object類中定義的equals方法,就是使用...
java學習 hashCode的計算
一 常見型別的幾個案例 class people public class test 列印輸出結果 10 65 553310500 48690 people 7852e922 2018699554二 分析 1 integer型別的資料,返回的hash值為資料本身 2 物件型別的資料,返回的一串字元 ...