哈希表查找速度为什么那么快?快在哪里了?
先看數(shù)組存儲數(shù)據(jù)是怎么樣的。
現(xiàn)在有一個數(shù)組,它里面每個單元存儲的是數(shù)據(jù)的地址
這叫指針數(shù)組吧,假設(shè)它有100個單元
我們稱他為p[100]
現(xiàn)在我想把一百個數(shù)據(jù)(地址)放到里面
我們想把某個數(shù)據(jù)放到p的第幾個單元完全是由
我們決定的,可以說想怎么放就怎么放
是一種亂放,既然是亂放,那么查找起來就比較耗時。
?
哈希表是怎么存儲數(shù)據(jù)的呢?
哈希表同樣是一個指針數(shù)組。
同樣需要存儲100個數(shù)據(jù),需要的就不是100個單元了,因為哈希表要把某個數(shù)據(jù)存放在某個單元不是隨機的一個過程,而是算出來的,這個算法叫哈希函數(shù)
比如要存儲一個數(shù)據(jù)對
張三 1882356
李四 ?23456789
王五 ?58856456
張三經(jīng)過哈希函數(shù)算出來的值是138,那么哈希表最少需要138個單元,因為張三對應(yīng)的數(shù)據(jù)1882356要存儲在指針數(shù)組的p[138]的位置上。
李四經(jīng)過哈希函數(shù)算出來的值是500,那么2356789這個數(shù)據(jù)就要存放在p[500]這個位置上。
所以你明白了,"數(shù)據(jù)的地址放在指針數(shù)組的哪個單元格是算出來的,是有跡可尋的,并不是想放在哪里就放在哪里"
那查找的時候就好查找了,你要查找張三對應(yīng)的數(shù)據(jù),
直接把張三用哈希函數(shù)算一下,得到138,哦 張三的數(shù)據(jù)就在p[138]這個位置上,所以一下就找到了。
?
哈希表是一個key- value的數(shù)據(jù)對,p是一個指針數(shù)組,用來存放value的地址,那么key和value的關(guān)系是下面這樣的。
p[f(key)]=&value
?
可以看出哈希表有時候會浪費很大空間的,比如上面張三 李四 王五那個例子 如果按照哈希表存儲要定義一個500個大小的指針數(shù)組。怎么解決這個問題呢?我再看看書。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yfish/p/7083084.html
總結(jié)
以上是生活随笔為你收集整理的哈希表查找速度为什么那么快?快在哪里了?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mybatis的xml配置备忘
- 下一篇: 利用Flume将MySQL表数据准实时抽