hashset的儲存原理或者工作原理,主要是從如何保證唯一性來說起。
這裡面主要有3個問題,需要回答?
第一,為什麼要採用hash演算法?有什麼優勢,解決了什麼問題?
第二,所謂雜湊表是一張什麼表?
第三,hashset如何保證儲存物件的唯一性?會經歷乙個什麼樣的運算過程?
首先,我們要明確一點,hashset底層採用的是hashmap來實現儲存,其值作為hashmap的key
publicboolean
add(e e)
具體關於hashmap的細節再說
第一,為什麼要採用hash演算法?有什麼優勢,解決了什麼問題?
解決的問題是唯一性
儲存資料,底層採用的是陣列
當我們往陣列放資料的時候,你如何判斷是否唯一?
可以採用遍歷的方式,逐個比較,但是這種效率低,尤其是資料很多的情況下
所以,為了解決這個效率低的問題,我們採用新的方式
採用hash演算法,通過計算儲存物件的hashcode,然後再跟陣列長度-1做位運算,得到我們要儲存在陣列的哪個下標下,如果此時計算的位置沒有其他元素,直接儲存,不用比較。
此處,我們只會用到hashcode
但是隨著元素的不斷新增,就可能出現「雜湊衝突」,不同的物件計算出來的hash值是相同的,這個時候,我們就需要比較,才需要用到equals方法
如果equals相同,則不插入,不相等,則形成鍊錶
第二,所謂雜湊表是一張什麼表?
本質是乙個陣列,而且陣列的元素是鍊錶
jdk1.7的版本實現
jdk1.8做了優化
隨著元素不斷新增,鍊錶可能會越來越長,會優化紅黑樹
談談HashSet的儲存原理
hashset的儲存原理 1 將要傳入的資料根據系統的hash演算法得到乙個hash值 2 根據hash值可以得出該資料在hash表中的位置 3 判斷該位置上是否有值,沒有值則把資料插入進來 如果有值則再次判斷傳入的值與原值是否位址或equals相同,如果相同則不存,否則通過鍊錶的方式 儲存到該位置...
HashSet的儲存原理
hashset的底層用雜湊雜湊表來儲存物件 預設長度為16的陣列 假如 set set new hashset set.add obj 內部儲存過程為 定義h obj.hashcode,得到obj物件的雜湊碼h,再對h進行hash雜湊運算,對陣列長度進行求餘,假如長度為16,則返回乙個0 15之間的...
對HashSet儲存原理的理解
hashset的底層是直接呼叫hashmap來實現儲存,其值作為hashmap的值。解決的是唯一性 儲存資料,底層採用陣列 陣列可以遍歷,但是效率低下 所以,使用hash演算法,對儲存物件使用hashcode,然後跟陣列長度 1做位運算,得到儲存下標,沒有其他元素,直接儲存,不用比較。隨著元素不斷增...