1、雜湊表也叫雜湊表,依賴了陣列下標的隨機訪問能力,實現了更高效的查詢
2、雜湊函式: 一種儲存結構,通過某種函式使元素的儲存位置與它的關鍵碼之間能夠建立一一對應的一種關係,那麼在查詢的時候通過該函式能夠很快找到該元素,這種函式叫做雜湊函式,構造出來的表叫做雜湊表(雜湊表)
3、當兩個key不同的元素,經過計算得到的hash值相同,此時就出現了「hash衝突」
4、解決雜湊衝突的方法:閉雜湊,開雜湊
1.核心思路:在衝突位置開始往後找到乙個合適的位置來存放這個衝突的值,當前時採用閉雜湊中的線性探測的方式來進行存放的
2.一旦涉及到hash衝突,此時hash表的基本操作的時間複雜度就不是嚴格的o(1)了,隨著衝突越嚴重,效率就會越低,所以在選擇雜湊表長度的時候,一般都要選擇乙個比較大的值(如果集合中有100個元素,就最好建立1000個元素的陣列)
陣列為[96273,273,1273,2273,2274]
插入
static
class
node
}private
static
final
double load_factor=
0.75
;//array就是hash表的本體,陣列中的每個元素又是乙個鍊錶的頭結點
private node[
] array=
newnode
[101];
private
int size=0;
////如果key已經存在,就修改當前的value值
//如果key不存在,就插入新的鍵值對
public
void
put(
int key,
int value)
}//迴圈結束還沒有找到key,就說明ket不存在,直接插入到鍊錶的頭部
node node=
newnode
(key,value)
; node.next=list;
array[index]
=node;
size++;if
(size/array.length>load_factor)
}
查詢
//根據key查詢指定元素,如果找到了返回對應的value,沒找到返回null
public integer get
(int key)
}return null;
}
擴容
private
void
resize()
}//讓新的陣列代替原來陣列
負載因子1、負載因子:通過這個指標可以衡量元素衝突的概率
2、負載因子=當前hash表中實際元素個數/陣列的capacity
1)如果是閉雜湊:負載因子一定是小於1的
2)如果是開雜湊:負載因子可以大於1
3、可以根據負載因子的值來決定是否要對hash表進行擴容
所謂擴容:申請乙個更大的陣列作為新的hash表,把原來的陣列拷貝過去(非常耗時)
雜湊表的應用
雜湊表 雜湊表
一 定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式...
雜湊表(雜湊表)
雜湊表是最基礎的資料結構之一,利用鍵值對儲存並檢索資料的一種非線性結構。在其它各種結構線性表 樹等資料結構中,記錄在結構中的位置是隨機的,和記錄關鍵字之間不存在確定的關係,因此,在結構中查詢記錄時需進行一系列和關鍵字的 比較 的基礎上。在順序查詢時,比較的結果為 與 兩種可能 在折半查詢 二叉排序樹...
雜湊表(雜湊表)
原文 雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除 有時包括側除 只需要接近常量的時間即0 1 的時間級。實際上,這只需要幾條機器指令。對雜湊表的使用者一一人來說,這是一瞬間的事。雜湊表運算得非常快,在電腦程...