java學習之為什麼要有 hashCode
阿新 • • 發佈:2021-11-04
Java 序列化中如果有些欄位不想進行序列化,怎麼辦?
對於不想進行序列化的變數,使用 transient 關鍵字修飾。
transient 關鍵字的作用是:阻止例項中那些用此關鍵字修飾的的變數序列化;當物件被反序列化時,被 transient
修飾的變數值不會被持久化和恢復。transient 只能修飾變數,不能修飾類和方法。
java為什麼要有 hashCode
我們先以“HashSet 如何檢查重複”為例子來說明為什麼要有 hashCode: 當你把物件加入 HashSet 時,HashSet 會先計算物件的
hashcode 值來判斷物件加入的位置,同時也會與該位置其他已經加入的物件的 hashcode 值作比較,如果沒有相符的 hashcode,HashSet
會假設物件沒有重複出現。但是如果發現有相同 hashcode 值的物件,這時會呼叫 equals()方法來檢查 hashcode
相等的物件是否真的相同。如果兩者相同,HashSet 就不會讓其加入操作成功。如果不同的話,就會重新雜湊到其他位置。(摘自我的 Java 啟蒙書《Head
first java》第二版)。這樣我們就大大減少了 equals 的次數,相應就大大提高了執行速度。
通過我們可以看出:hashCode() 的作用就是獲取雜湊碼,也稱為雜湊碼;它實際上是返回一個 int
整數。這個雜湊碼的作用是確定該物件在雜湊表中的索引位置。hashCode()在散列表中才有用,在其它情況下沒用。在散列表中 hashCode()
的作用是獲取物件的雜湊碼,進而確定該物件在散列表中的位置。