手動實現簡單HashMap。

2021-09-29 01:21:06 字數 2499 閱讀 1785

hashmap實現方式兩種:

陣列加鍊表

陣列加紅黑樹

這裡只簡單實現了第一種方式,並且未實現拓容。

雜湊函式用了最簡單的取餘法。

順便加上了泛型,簡單練習一下

/** * @author 馬潔

* @date 2019/10/26 - 19:32

*/public

class

link

public

link()

/** * 插入乙個鍵值對,如果該節點的鍵和其他節點鍵重複,則覆蓋值。

* @param key 鍵

* @param value 值

*/public

void

insert

(t key, v value)

else

}/**

* 根據指定key找相應結點

* @param key 鍵

* @return 找到的相應結點

*/public node

find

(t key)

else

}/**

* 根據指定key刪除相應結點

* @param key 鍵

* @return 是否刪除成功

*/public

boolean

delete

(t key)

parent.next = parent.next.next;

return

true;}

/** * 更新指定key的值

* @param key 鍵

* @param newvalue 新值

* @return 是否更新成功

*/public

boolean

update

(t key, v newvalue)

parent.next.value = newvalue;

return

true;}

/** * 根據給定key找到其父節點

* @param key 鍵

* @return 對應的父節點

*/private node

findparent

(t key)

node

node = head.next;

node

parent = head;

while

(node != null)

parent = node;

node = node.next;

}return null;

}/**

* 返回頭結點

* @return 頭結點

*/public node

gethead()

}

package thashmap;

/** * @date 2019/10/26 - 19:33

*/public

class

myhashmap

public

myhashmap()

public

void

put(t key, v value)

this

.map[

getindex

(key)].

insert

(key, value);}

public v get

(t key)

public

boolean

delete

(t key)

public

boolean

update

(t key, v value)

public integer getindex

(t key)

public link

getmap()

}

package thashmap;

/** * @date 2019/10/26 - 19:33

*/public

class

main

public

static

void

print

(myhashmap map)}}

system.out.

println

("*****");

}}

實現簡單的HashMap

hashmap底層實現是採用了雜湊表,屬於一種基本的資料結構,而雜湊表的基本結構是 陣列 鍊錶 之前我們說到陣列和鍊錶,它們之間的優缺點如下 陣列的查詢速度快,增刪效率低 鍊錶的增刪效率高,查詢速度低 這裡我們想如何才能把這兩者的優勢集中起來呢?於是雜湊表就出來了。我們手寫乙個hashmap類來看一...

C 簡單實現HashMap

執行緒不安全 2倍擴容,方便使用位運算計算桶位置 但存在極端情況下的弊端 不支援將鍊錶轉為紅黑樹 pragma once include hash函式 inthash int key 執行緒不安全容器 2倍擴容,方便計算 不支援鍊錶轉為紅黑樹 class hashmap node findnode ...

Java簡單實現自定義HashMap

陣列的特點是 定址容易,插入和刪除困難 而鍊錶的特點是 定址困難,插入和刪除容易。要綜合兩者的特性,就有了雜湊表。雜湊表有多種不同的實現方法,最經典的一種方法 拉鍊法。雜湊表可以理解為鍊錶的陣列。主幹為陣列,陣列的每乙個成員是鍊錶。該資料結構所容納的所有元素均包含乙個指標,用於元素間的鏈結。我們根據...