一、hash定義:
可譯作「雜湊」,即把任意長度的輸入(預對映),通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,即雜湊值的空間常小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來唯一的確定輸入值。
二、常用hash函式:
三、hashcode:
hashcode 是通過hash函式得來的,即hashcode就是在hash表中對應的位置。hashcode代表的是物件的位址,說的是物件在hash表中的位置,實體地址說的是物件存放在記憶體中的位址。
那麼物件如何得到hashcode呢?通過物件的內部位址(實體地址)轉換成乙個整數,然後該整數通過hash函式的演算法就得到了hashcode。
四、hashcode的意義:
栗子:現有乙個能存放1000個數的記憶體,要在其中放1000個不一樣的數字,最笨的辦法是存放乙個就遍歷一遍,看是否有相同的數字,當存到900個數,開始存901個數時,需要和900個數比較,效率太低了。但是使用hashcode記錄物件的位置會快很多,假設hash表中有9個位置,存第乙個數時,hashcode為1,就放在hash表為1的位置,hashcod為2就放在2的位置,等等,存到100個數的時候,假設hash表為2的位置有了20個資料,現在存101個資料的時候,得到的hashcode為2,那麼就是20個數和他的hascode相同,只需要和這個20個數比較(equals),這樣比較的次數就少了。
五、equals方法和hashcode的關係:
思考:如何判斷兩個物件是否相等?
通過上面的栗子,可知,先通過hashcode來比較,如果hashcode一樣,那麼就用equals方法來比較兩個物件是否相當。
通過上面栗子,能得到2個結論:
1.如果2個物件equals相當等,那麼這兩個物件的hashcode一定相同;
2.兩個物件的hashcode相同,不代表2個物件就相同,只能說明這2個物件在雜湊儲存結構中,存放在同乙個位置,即hash表的同乙個位置上。
六、為什麼重寫equals方法時,建議也重寫hashcode方法?
栗子:
七、hash表的特點
資料結構學習之 堆疊
堆疊 順序儲存 define maxsize 10 typedef int elemtype struct stack 1.判斷堆疊是否為空 int emptyst struct stack s 2.判斷堆疊是否已滿的函式 int fullst struct stack s 3.元素入棧 void ...
資料結構學習
什麼是資料結構 對計算機記憶體中的資料的一種安排。資料結構有那些?優缺點?1.陣列 插入快 知道下標 查詢慢,刪除慢,大小固定 2.有序陣列 比無序的查詢塊,刪除和插入慢,大小固定 3.棧 吃多了吐 個人理解 4.佇列 吃多了拉 個人理解 5.鍊錶 插入快,刪除快,查詢慢 6.二叉樹 查詢 插入 刪...
資料結構學習
鍊錶 class listnode definit self,x self.val x 節點值 self.next none 後繼節點值 例項化節點 n1 listnode 4 節點head n2 listnode 5 n3 listnode 1 構建引用指向 n1.next n2 n2.next ...