先看數組存儲數據是怎麼樣的。算法
如今有一個數組,它裏面每一個單元存儲的是數據的地址數組
這叫指針數組吧,假設它有100個單元函數
咱們稱他爲p[100]指針
如今我想把一百個數據(地址)放到裏面數據
咱們想把某個數據放到p的第幾個單元徹底是由哈希表
咱們決定的,能夠說想怎麼放就怎麼放
是一種亂放,既然是亂放,那麼查找起來就比較耗時。
哈希表是怎麼存儲數據的呢?
哈希表一樣是一個指針數組。
一樣須要存儲100個數據,須要的就不是100個單元了,由於哈希表要把某個數據存放在某個單元不是隨機的一個過程,而是算出來的,這個算法叫哈希函數
好比要存儲一個數據對
張三 1882356
李四 23456789
王五 58856456
張三通過哈希函數算出來的值是138,那麼哈希表最少須要138個單元,由於張三對應的數據1882356要存儲在指針數組的p[138]的位置上。
李四通過哈希函數算出來的值是500,那麼2356789這個數據就要存放在p[500]這個位置上。
因此你明白了,"數據的地址放在指針數組的哪一個單元格是算出來的,是有跡可尋的,並非想放在哪裏就放在哪裏"
那查找的時候就好查找了,你要查找張三對應的數據,
直接把張三用哈希函數算一下,獲得138,哦 張三的數據就在p[138]這個位置上,因此一下就找到了。
哈希表是一個key- value的數據對,p是一個指針數組,用來存放value的地址,那麼key和value的關係是下面這樣的。
p[f(key)]=&value
能夠看出哈希表有時候會浪費很大空間的,好比上面張三 李四 王五那個例子 若是按照哈希表存儲要定義一個500個大小的指針數組。怎麼解決這個問題呢?我再看看書。