我知道,只要您覆蓋equals
方法,您也應該覆蓋hashCode
方法。對象的** hashCode **函數 - jdk如何使用它?
但是我不確定是什麼,JDK如何使用它?
例如HashSet
/HashMap
是使用散列表的set/map實現,所以說這個表使用對象的hash_code作爲他們的hash_function的關鍵是正確的嗎?
我知道,只要您覆蓋equals
方法,您也應該覆蓋hashCode
方法。對象的** hashCode **函數 - jdk如何使用它?
但是我不確定是什麼,JDK如何使用它?
例如HashSet
/HashMap
是使用散列表的set/map實現,所以說這個表使用對象的hash_code作爲他們的hash_function的關鍵是正確的嗎?
因此,說這張表使用對象的hash_code作爲hash_function的關鍵字是正確的嗎?
差不多。 hashCode()
實際上是散列函數。所以每當它試圖找到密鑰或把密鑰時,它都會調用密鑰hashCode()
並使用它(用一些位掩碼)在哈希表中找到合適的元素。
另請注意,它不是由JVM直接使用,而是由某些類來使用。
這個問題的答案很容易在the documentation發現:
如果很多映射關係將被存放在一個HashMap實例,具有足夠大的容量創建它將使映射不是讓更有效地存儲它根據需要執行自動重新散列以增長表格。請注意,使用相同的多個密鑰
hashCode()
是降低任何散列表性能的一個肯定方法。爲了改善影響,當鍵是Comparable時,該類可以使用鍵之間的比較順序來幫助斷開關係。
所以是的,HashMap
使用hashCode
。
您也可以看到the source code,因爲JDK是開源的。 (您可以在JDK安裝中的src.jar
中找到它。)
是的,對象'hashCode'方法用作HashSet和HashMap類中的哈希函數。 – aioobe