hashset的底層用雜湊雜湊表來儲存物件(預設長度為16的陣列),
假如:set set=new hashset();
set.add(obj);
內部儲存過程為:定義h=obj.hashcode,得到obj物件的雜湊碼h,再對h進行hash雜湊運算,對陣列長度進行求餘,假如長度為16,則返回乙個0-15之間的值,然後這個值就是存在hashset陣列中的下標。如果下標位置沒有物件(不起衝突),則把obj加到該位置;如果已近有物件(起衝突),則用equals判斷兩物件是否相等,相等則捨棄obj,不相等,則把obj以節點的方式加在該物件下面。
所以,只有覆蓋了物件的equals方法和hashcode方法,讓此方法按自己的演算法運算的話才能算是相同的物件,覆蓋hashcode方法的原則:
原則1:讓equals相等的物件返回相同的hashcode(為了過濾掉相等的元素)
原則2:盡量保證equals不相同的物件返回不同的hashcode(為了新增不同的元素)
談談HashSet的儲存原理
hashset的儲存原理 1 將要傳入的資料根據系統的hash演算法得到乙個hash值 2 根據hash值可以得出該資料在hash表中的位置 3 判斷該位置上是否有值,沒有值則把資料插入進來 如果有值則再次判斷傳入的值與原值是否位址或equals相同,如果相同則不存,否則通過鍊錶的方式 儲存到該位置...
談談HashSet的儲存原理
hashset的儲存原理或者工作原理,主要是從如何保證唯一性來說起。這裡面主要有3個問題,需要回答?第一,為什麼要採用hash演算法?有什麼優勢,解決了什麼問題?第二,所謂雜湊表是一張什麼表?第三,hashset如何保證儲存物件的唯一性?會經歷乙個什麼樣的運算過程?首先,我們要明確一點,hashse...
對HashSet儲存原理的理解
hashset的底層是直接呼叫hashmap來實現儲存,其值作為hashmap的值。解決的是唯一性 儲存資料,底層採用陣列 陣列可以遍歷,但是效率低下 所以,使用hash演算法,對儲存物件使用hashcode,然後跟陣列長度 1做位運算,得到儲存下標,沒有其他元素,直接儲存,不用比較。隨著元素不斷增...