hashmap
Posted zhangjian0092
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于hashmap的主要内容,如果未能解决你的问题,请参考以下文章