defdisplay(self): """显示哈希表内容""" for i, node inenumerate(self.__table): print(f"Index {i}: ", end="") current = node while current: print(f"({current.key}, {current.value}) -> ", end="") current = current.next print("None") print()
index = self.__hash(key) new_node = Node(key, value) # 如果当前位置为空,直接插入 if self.__table[index] isNone: self.__table[index] = new_node else: # 否则,发生哈希冲突,链式存储 current = self.__table[index] while current: # 如果键已经存在,更新值 if current.key == key: current.value = value return ifnot current.next: break current = current.next # 如果键不存在,插入到链表尾部 current.next = new_node self.__size += 1
defremove(self, key): """删除键值对""" index = self.__hash(key) current = self.__table[index] prev = None
while current: if current.key == key: if prev: # 删除非头节点 prev.next = current.next else: # 删除头节点 self.__table[index] = current.next self.__size -= 1 returnTrue prev = current current = current.next returnFalse
defget(self, key): """访问键值对""" index = self.__hash(key) current = self.__table[index] while current: if current.key == key: return current.value current = current.next returnNone
deffor_each(self, func): """遍历哈希表""" for node in self.__table: current = node while current: func(current.key, current.value) current = current.next