執行緒不安全;
2倍擴容,方便使用位運算計算桶位置;但存在極端情況下的弊端;
不支援將鍊錶轉為紅黑樹
#pragma once
#include
//hash函式
inthash
(int key)
//執行緒不安全容器
//2倍擴容,方便計算
//不支援鍊錶轉為紅黑樹
class
hashmap
node*
findnode
(const
int& key)};
using nodeptr = node*
; nodeptr* table;
const
double load_factor =
0.75
;//負載因子
int threshold =12;
//擴容閾值:load_factor*size
int size =
1<<4;
//table大小
int maxsize =
1<<30;
//table最大尺寸
int count =0;
//當前元素
//2倍擴容
void
resize()
} std::
swap
(newtable, table)
; size = newsize;
threshold = size * load_factor;
delete
newtable;
}//增加count
void
addcount
(int x)
public
:hashmap()
~hashmap()
table[i]
=null;}
delete
table;
}hashmap
(const hashmap&)=
delete
; hashmap&
operator=(
const hashmap&)=
delete
;//獲取值,
//不存在key,返回false
bool
get(
int key,
int& value)
//放入值
void
put(
int key,
int value)}}
;
實現簡單的HashMap
hashmap底層實現是採用了雜湊表,屬於一種基本的資料結構,而雜湊表的基本結構是 陣列 鍊錶 之前我們說到陣列和鍊錶,它們之間的優缺點如下 陣列的查詢速度快,增刪效率低 鍊錶的增刪效率高,查詢速度低 這裡我們想如何才能把這兩者的優勢集中起來呢?於是雜湊表就出來了。我們手寫乙個hashmap類來看一...
手動實現簡單HashMap。
hashmap實現方式兩種 陣列加鍊表 陣列加紅黑樹 這裡只簡單實現了第一種方式,並且未實現拓容。雜湊函式用了最簡單的取餘法。順便加上了泛型,簡單練習一下 author 馬潔 date 2019 10 26 19 32 public class link public link 插入乙個鍵值對,如果...
Java簡單實現自定義HashMap
陣列的特點是 定址容易,插入和刪除困難 而鍊錶的特點是 定址困難,插入和刪除容易。要綜合兩者的特性,就有了雜湊表。雜湊表有多種不同的實現方法,最經典的一種方法 拉鍊法。雜湊表可以理解為鍊錶的陣列。主幹為陣列,陣列的每乙個成員是鍊錶。該資料結構所容納的所有元素均包含乙個指標,用於元素間的鏈結。我們根據...