談談HashSet的儲存原理

2022-02-06 08:47:07 字數 1083 閱讀 3393

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做位運算,得到儲存下標,沒有其他元素,直接儲存,不用比較。隨著元素不斷增...