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)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章