当前位置: 面试刷题>> 哈希表(经典算法150题)


题目描述补充

题目:实现一个自定义哈希表

在数据结构中,哈希表(Hash Table)是一种通过哈希函数组织数据,以支持快速插入、删除和查找操作的数据结构。哈希表允许使用键(Key)来直接访问内存存储位置的数据值(Value)。本题要求你实现一个自定义的哈希表,满足以下基本要求:

  1. 初始化:能够创建一个空的哈希表。
  2. 插入:向哈希表中插入一个新的键值对。如果键已存在,则更新其对应的值。
  3. 查找:根据给定的键查找并返回对应的值。如果键不存在,则返回null或适当的默认值。
  4. 删除:根据给定的键删除键值对。如果键不存在,则不执行任何操作。

进阶要求

  • 实现时考虑哈希冲突的处理,比如链地址法(使用链表处理冲突)或开放地址法。
  • 考虑哈希表的动态扩容机制,当装载因子(已存储的元素数量与哈希表总容量的比值)达到一定阈值时,自动扩容。

示例代码

以下分别给出PHP、Python、JavaScript三种语言的实现示例,这些示例将侧重于基础功能的实现,不包括动态扩容和复杂的哈希冲突处理机制。

PHP

class HashTable {
    private $table = [];

    public function insert($key, $value) {
        $this->table[$key] = $value;
    }

    public function find($key) {
        return isset($this->table[$key]) ? $this->table[$key] : null;
    }

    public function delete($key) {
        if (isset($this->table[$key])) {
            unset($this->table[$key]);
        }
    }
}

// 使用示例
$hashTable = new HashTable();
$hashTable->insert('name', 'John Doe');
echo $hashTable->find('name'); // 输出: John Doe
$hashTable->delete('name');
echo $hashTable->find('name'); // 输出: null

Python

class HashTable:
    def __init__(self):
        self.table = {}

    def insert(self, key, value):
        self.table[key] = value

    def find(self, key):
        return self.table.get(key, None)

    def delete(self, key):
        if key in self.table:
            del self.table[key]

# 使用示例
hash_table = HashTable()
hash_table.insert('name', 'John Doe')
print(hash_table.find('name'))  # 输出: John Doe
hash_table.delete('name')
print(hash_table.find('name'))  # 输出: None

JavaScript

class HashTable {
    constructor() {
        this.table = {};
    }

    insert(key, value) {
        this.table[key] = value;
    }

    find(key) {
        return this.table[key] || null;
    }

    delete(key) {
        if (key in this.table) {
            delete this.table[key];
        }
    }
}

// 使用示例
const hashTable = new HashTable();
hashTable.insert('name', 'John Doe');
console.log(hashTable.find('name')); // 输出: John Doe
hashTable.delete('name');
console.log(hashTable.find('name')); // 输出: null

这些代码示例展示了如何在不同的编程语言中实现基本的哈希表操作。在实际应用中,你可能需要根据具体需求调整哈希表的实现,包括增加动态扩容和更复杂的哈希冲突处理机制。

推荐面试题