hashCode()方法對於HashSet是不是十分重要
hash(也被翻譯為雜湊、雜湊)演算法的功能是,它能保證快速查詢被檢索的物件,hash演算法的價值在於速度。當需要查詢集合中某個元素時,hash演算法可以直接根據該元素的hashCode值計算出該元素的儲存位置,從而快速定位該元素。為了理解這個概念,可以先看陣列(陣列是所有能儲存一組元素裡最快的資料結構)。陣列可以包含多個元素,每個元素都有索引,如果需要訪問某個陣列元素,只需提供該元素的索引,接下來即可根據該索引計算該元素在記憶體裡的儲存位置。
表面上看起來,HashSet集合裡的元素都沒有索引,實際上當程式向HashSet集合中新增元素時,HashSet會根據該元素的hashCode值來計算它的儲存位置,這樣也可快速定位該元素。
為什麼不直接使用陣列、還需要使用HashSet呢?因為陣列元素的索引是連續的,而且陣列的長度是固定的,無法自由增加陣列的長度。而HashSet就不一樣了,HashSet採用每個元素的hashCode值來計算其儲存位置,從而可以自由增加HashSet的長度,並可以根據元素的hashCode值來訪問元素。因此,當從HashSet中訪問元素時,HashSet先計算該元素的hashCode值(也就是呼叫該物件的hashCode()方法的返回值),然後直接到改hashCode值對應的位置去取出該元素——這就是HashSet速度很快的原因。
相關文章
- 細說equals()方法和hashCode()方法
- 詳解equals()方法和hashCode()方法
- 重新實現hashCode()方法
- 搞懂 Java equals 和 hashCode 方法Java
- Java hashCode() 方法深入理解Java
- Java基礎系列-equals方法和hashCode方法Java
- Java集合 HashSet的原理及常用方法Java
- String的equals和hashCode方法
- 自動生成hashcode和equals方法
- HashSet
- 重寫Object.equals()方法和Object.hashCode()方法Object
- 關於重寫equals()和hashCode()的思考
- 重寫equals()方法時,需要同時重寫hashCode()方法
- Java原始碼之String的HashCode方法Java原始碼
- hashCode()方法原始碼執行簡要分析原始碼
- 重寫equals()時為什麼也得重寫hashCode()之深度解讀equals方法與hashCode方法淵源
- 關於HashSet與TreeSet的區別與聯絡
- 集合框架-HashSet集合的add()方法的原始碼框架原始碼
- String中hashCode方法的執行緒安全執行緒
- 如何正確實現Java中的hashCode方法Java
- jdk-HashSetJDK
- HashSet和HashMapHashMap
- 『Java 語法基礎』對 equals() 和 hashCode() 的理解Java
- 建議重寫equals方法時也一併重寫hashCode方法
- Java重寫equals方法時為什麼要重寫hashcode方法Java
- equals & hashCode
- 關於equals()和hashcode()的一些約定
- 為什麼說它對 Android 未來的發展十分重要?Android
- java為什麼要重寫hashCode和equals方法Java
- js模擬實現hashCode()方法程式碼例項JS
- php判斷變數是不是null的方法PHP變數Null
- HashSet原始碼分析原始碼
- HashSet 實現類
- Java集合系列-HashSetJava
- HashSet原始碼解析原始碼
- Dotnet演算法與資料結構:Hashset, List對比演算法資料結構
- 關於HashMap的key重寫hashcode和equals的理解HashMap
- 物件只定義了Equals和Hashcode方法之一的漏洞物件