# 初始化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获取bucketdef 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删除bucketdef 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