C 簡單實現HashMap

2021-10-23 16:20:10 字數 1310 閱讀 1775

執行緒不安全;

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

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