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