hashmap



# 初始化amap, 把列表num_buckets添加到amap,num_buckets用来存hashmap里设置的内容

def new(num_buckets=256):
amap = []
for i in range(num_buckets):
amap.append([])
return amap


# 利用求余来获得一个放置key的位置, hash函数用来获取一个数字或字符串的哈希值, 值为整数
def hash_key(amap, key):
return hash(key) % len(amap)


# 通过bucket_id获取bucket
def get_bucket(amap, key):
bucket_id = hash_key(amap, key)
return amap[bucket_id]


# 使用enumerate()for循环遍历bucket, key获取索引, ,
def get_slot(amap, key, default=None):
bucket = get_bucket(amap, key)
for i, kv in enumerate(bucket):
k, v = kv
if key == k:
return i, k, v
return -1, key, default


# 取值
def get(amap, key, value):
i, k, v = get_slot(amap, key)
return v


# 设置键值对追加到字典中,保证每个key存储一次
def set(amap, key, value):
bucket = get_bucket(amap, key)
i, k, v = get_slot(amap, key)
# 如果位置存在, 就代替
if i >= 0:
bucket[i] = (key, value)
# 如果不存在, 就追加到字典中
else:
bucket.append((key, value))


# 通过key删除bucket
def delete(amap, key):
bucket = get_bucket(amap, key)
for i in range(len(bucket)):
k, v = bucket[i]
if key == k:
del bucket[i]
break


# 调试打印功能
def list(amap):
for bucket in amap:
if bucket:
for k, v in bucket:
print(k, v)



原文地址:https://www.cnblogs.com/zhangjian0092/p/12020197.html