Python数据结构实战——哈希表中的冲突处理(Collision Handling In Hash Table)

文章目录

  • 1.定义哈希类(能处理冲突)
  • 2.测试
    • 2.1.增加键值
    • 2.2.查找对应键值
    • 2.3.查看哈希表
    • 2.4.更新值
    • 2.5.删除键值对

1.定义哈希类(能处理冲突)

class HashTable():
    def __init__(self):
        self.MAX = 10
        self.arr = [[] for i in range(self.MAX)]    #[]用来存放链表
    
    def get_hash(self, key):     #计算可以的哈希值
        hash = 0
        for char in key:
            hash += ord(char)
        return hash % self.MAX
    
    def __getitem__(self, key):
        arr_index = self.get_hash(key)
        for kv in self.arr[arr_index]:   #取hash值对应的链表
            if kv[0] == key:
                return kv[1]    #取值
            
    def __setitem__(self, key, val):
        h = self.get_hash(key)
        found = False
        for idx, element in enumerate(self.arr[h]):   #依次遍历哈希值相同的链表
            if len(element) == 2 and element[0] == key:     
                self.arr[h][idx] = (key, val)   #在哈希值处插入键值对
                found = True     #标记已存在
        if not found:
            self.arr[h].append((key, val))   
    
    def __delitem__(self, key):      #删除元素
        arr_index = self.get_hash(key)
        for index, kv in enumerate(self.arr[arr_index]):
            if kv[0] == key:
                print("del", index)
                del self.arr[arr_index][index]

2.测试

2.1.增加键值

t = HashTable()   #实例化
t['march 6'] = 310   #增加键值
t['march 7'] = 420
t['march 8'] = 67
t['march 17'] = 63457

2.2.查找对应键值

t['march 6']   #查找键对应的值
t['march 17']

Python数据结构实战——哈希表中的冲突处理(Collision Handling In Hash Table)_第1张图片

2.3.查看哈希表

t.arr 

Python数据结构实战——哈希表中的冲突处理(Collision Handling In Hash Table)_第2张图片

2.4.更新值

t['march 6'] = 11    #插值
t['march 6'] 
#输出11 

2.5.删除键值对

del t['march 17']
t.arr

Python数据结构实战——哈希表中的冲突处理(Collision Handling In Hash Table)_第3张图片

你可能感兴趣的:(Python数据结构实战)