📅  最后修改于: 2023-12-03 15:07:31.860000             🧑  作者: Mango
哈希表(Hash Table),也称为散列表(Hash Map),是一种以键值对(Key-Value)形式存储数据的数据结构。它通过使用哈希函数将一个键值映射到一个数组索引以进行访问,可以实现快速的插入、删除和查找操作。
哈希表的基本原理就是通过哈希函数将键值映射到数组索引上,从而实现快速查找。哈希函数是将任意长度的输入(例如,字符串)映射为固定长度的输出(哈希值)的函数。对于同一个输入,哈希函数总是返回相同的输出。
当我们向哈希表中插入元素时,它首先通过哈希函数计算出键值的哈希值,并将其映射到一个数组索引上。如果该位置上没有元素,则直接插入即可;否则,就需要解决哈希冲突的问题。常见的解决哈希冲突的方法有链表法和开放寻址法。
下面是使用 Python 实现哈希表(链表法)的例子:
class ListNode:
def __init__(self, key=None, value=None):
self.key = key
self.value = value
self.next = None
class MyHashMap:
def __init__(self):
self.size = 10000
self.data = [None] * self.size
def put(self, key: int, value: int) -> None:
index = key % self.size
if not self.data[index]:
self.data[index] = ListNode(key, value)
else:
head = self.data[index]
while head:
if head.key == key:
head.value = value
return
if not head.next:
head.next = ListNode(key, value)
return
head = head.next
def get(self, key: int) -> int:
index = key % self.size
head = self.data[index]
while head:
if head.key == key:
return head.value
head = head.next
return -1
def remove(self, key: int) -> None:
index = key % self.size
if not self.data[index]:
return
if self.data[index].key == key:
self.data[index] = self.data[index].next
return
head = self.data[index]
while head.next:
if head.next.key == key:
head.next = head.next.next
return
head = head.next
这个哈希表的实现使用了链表法解决哈希冲突。其中,ListNode
是链表节点的定义,MyHashMap
是哈希表的定义。put
、get
、remove
是对哈希表进行插入、查找、删除操作的方法。它们的具体实现可以参考代码中的注释。
哈希表是一种高效的数据结构,可以实现常数时间复杂度的插入、删除和查找操作。但是,在进行哈希函数的设计时,需要考虑一些问题(如哈希冲突的处理、负载因子的控制等),否则可能会导致哈希表效率的下降。