hashset的儲存原理:
1、將要傳入的資料根據系統的hash演算法得到乙個hash值;
2、根據hash值可以得出該資料在hash表中的位置;
3、判斷該位置上是否有值,沒有值則把資料插入進來;如果有值則再次判斷傳入的值與原值是否位址或equals相同,如果相同則不存,否則通過鍊錶的方式 儲存到該位置。
比如:setset = new hashset();
set.add( e );//add方法是return map.put( e , present) == null;
本質是例項化醫個hashmap物件 ---->map = new hashmap<>();
然後是map.put()方法,
public v put(k key,v value){
if(table == empty_table){
inflatetable(threshold); //此處是初始化一張雜湊表,表為陣列結構
int hash = hash(key); //根據key值,計算出對應的int型別的hash值
int i = inexfor(hash,table.length): //通過hash值在table表中得到乙個儲存的位置
//判斷指定下標的位置是否為空,如果為空則跳出迴圈,直接新增
//否則與該位置上的鍊錶元素一一比較,如果雜湊值相同且位址或equals相同,則返回
//否則新增進來
for(entrye = table[i]; e != null; e = e.next){
object k ;
//如果雜湊值相等並且位址相等(需重寫equals)
if(e.hash == hash && ((k = e.key) == key || key.equals(k)){
v oldvalue = e.value;
e.value = value;
e.recordaccess(this);
return oldvalue;
modcount++;
addentry(hash, key, value, i); //以鍊錶的方式新增元素
return null;
談談HashSet的儲存原理
hashset的儲存原理或者工作原理,主要是從如何保證唯一性來說起。這裡面主要有3個問題,需要回答?第一,為什麼要採用hash演算法?有什麼優勢,解決了什麼問題?第二,所謂雜湊表是一張什麼表?第三,hashset如何保證儲存物件的唯一性?會經歷乙個什麼樣的運算過程?首先,我們要明確一點,hashse...
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做位運算,得到儲存下標,沒有其他元素,直接儲存,不用比較。隨著元素不斷增...