hashmap

心不动则不痛 提交于 2019-12-11 08:11:09
# 初始化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)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!