底層結構是雜湊表,採用了順序表+鍊錶結合結構;同乙個鍊錶的上所有元素的儲存位址都是相同的,是發生衝突的元素
鍊錶上每個節點的就是乙個entry,字段包括四部分
雜湊碼可能不相同,儲存位址相同。
新增快、查詢快(通過計算得到儲存位置,不是通過比較) 無序 (key)唯一關鍵引數
預設主陣列長度16; 預設裝填因子0.75。 每次主陣列擴容為原來的2倍 jdk8,當鍊表長度大於8,鍊錶變成紅黑樹
第一步計算雜湊碼,不僅呼叫了hashcode(),有進行了多次雜湊。目的在於key不同,雜湊碼盡量不同,減少衝突
細節:發生衝突,經過比較不存在相同key的元素,要新增乙個新的節點。不是加到鍊錶最後,而是新增到鍊錶最前
//-------實現主要方法-------
@override
public
void
put(object key, object value)
//遍歷
current = current.next;
}//建立新的節點
node newnode =
newnode
(hash,key,value)
;//讓新的節點下乙個為原來的節點
newnode.next = node[index]
;//儲存新的開始節點
node[index]
= newnode;
}else
//如果沒有發現相同的鍵,則長度增加
size++;}
@override
public object get
(object key)
//向後移動鍊錶
currententry = currententry.next;}}
return entry == null ? null : entry.
getvalue()
;}@override
public string tostring()
}}if(builder.
length()
!=1) builder.
("}");
return builder.
tostring()
;}@override
public
intsize()
@override
public
boolean
isempty()
//-------定義內部類實現entry介面-------
class
node
implements
map.entry
@override
public object getvalue()
//-------構造-------
public
node()
public
node
(int hash, object key, object value)
public
node
(int hash, object key, object value, node next)
//-------tostring-------
public string tostring()
";}else";
}}}}
資料結構 雜湊
裝填因子 key的個數與表長的比值。雜湊表查詢成功的平均查詢長度,查詢失敗的平均查詢長度都是期望,期望怎麼求,平均查詢長度就怎麼求。雜湊表這裡有兩種實現方式 線性開型定址雜湊,鍊錶雜湊。1.線性開型定址雜湊 陣列實現,資料個數不大於表長,放乙個元素時,若發生衝突,則順次線性掃瞄直到找到乙個空位。2....
資料結構 雜湊
關鍵 不比較關鍵碼,直接搜尋得到需要的數。特點 與搜尋樹不一樣,雜湊結構元素的儲存位置與關鍵碼直接對應,可以不用進行比較遍歷。如圖,建立乙個陣列,把a 4 中的資料按特定的規則儲存到相應的位置,比如a i n,到時候搜尋資料的時候可以按照同樣的規律直接找到這個位置,如果這個位置有數,則存在。比如按照...
資料結構 雜湊
將元素的儲存位置和該元素的關鍵碼通過某種函式建立一一對應的關係,構造出來的儲存結構稱之為雜湊表,轉換時借助的函式稱之為雜湊函式,在理想情況下,根據關鍵碼搜尋元素時可以不經過任何比較,一次性從表中查詢到所要搜尋的元素 但是在通過雜湊函式進行元素儲存位置確立的時候會出現,不同元素的關鍵碼通過雜湊函式計算...