事實上不管使用陣列還是鍊錶儲存資料都會存在較大缺陷,
當你使用陣列時,難於刪除和新增資料
當你使用鍊錶時難於查詢資料
因此hash表綜合了兩者的優缺點,使的查詢和新增等操作既不至於複雜也不至於簡單。
因此hash表的原理可以是陣列中存鍊錶,鍊錶上存資料
簡單的建立方式如下:
public
class
hnode
item data;
hnode next;
hnode parent;
}//鍊錶
public
class
item
int key;
string value;
}//資料
public
class
myhash
//hash表的的簡單形式
上面所形成的hash表可以用下圖表示
其實也就是之前的陣列與鍊錶新增方式,查詢也一樣。。
新增
public
void
put(
int key,string value)
else
/*陣列下無資料時直接存入,
反之作為該陣列的下個節點存入*/
count++
;int t=count/memo.length;
if(t>2)
memo=memo_2;
//儲存次數超過陣列長度的三倍時就將陣列變長三倍 }}
public
intsize()
public
intlength()
查詢
public string get
(int key)
用上述方法執行此串**:
public
static
void
main
(string[
] args)
hb.put(k2, v2)
;
hb.put(k3, v3)
;
hb.put(k4, v4)
;int count =hb.
size()
; string word=hb.
get(k2)
; string word_1=hb.
get(k4)
; system.out.
println
("陣列長度"
+hb.
length()
);system.out.
println
("數量"
+count)
; system.out.
println
(k2+
"get:"
+word)
; system.out.
println
(k4+
"get:"
+word_1)
;}
結果如下: Hash表的使用
hash表能夠實現在o 1 時間內對資料訪問,雖然空間複雜度很高,但是時間複雜度很好。所以下面說一些使用hash的演算法。利用hash可以實現統計字元的個數,然後在遍歷一次得到最早的那個只出現一次的字元。注意 如果傳入的字串為null或者字串裡沒有只出現一次的字元,這兩種情況都要返回 1。int f...
hash表 hash演算法
概念 雜湊表 hash table。也叫雜湊表 是依據關鍵碼值 key value 而直接進行訪問的 資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f key 對隨意給定的keyword值ke...
Hash表和Hash衝突
hash表中的元素儲存位址是通過hash函式計算出來的,當要取出指定元素的時候,直接通過hash函式計算出元素的儲存位址。有時候會出現key不同,但是通過hash函式計算出來的值相同,這個值相同意味著這兩個key要存在同一位置,這顯然不對,這就是hash衝突。hash函式有多種構造方法,常見的有直接...