logo
OOD Interview Questions

设计 HashMap

HashMap 面向对象设计示例

这份 notebook 由 Donne Martin 准备。Source 和 license info 在 GitHub

设计 HashMap

Constraints & assumptions

  • 为了简化问题,keys 只考虑 integer 吗?
    • Yes
  • 处理 collision 时,可以用 chaining 吗?
    • Yes
  • 需要考虑 load factor 吗?
    • No
  • 可以假设输入都是 valid,还是需要做 validate?
    • Assume they're valid
  • 可以假设能放进 memory 吗?
    • Yes

Solution

%%writefile hash_map.py
class Item(object):

    def __init__(self, key, value):
        self.key = key
        self.value = value


class HashTable(object):

    def __init__(self, size):
        self.size = size
        self.table = [[] for _ in range(self.size)]

    def _hash_function(self, key):
        return key % self.size

    def set(self, key, value):
        hash_index = self._hash_function(key)
        for item in self.table[hash_index]:
            if item.key == key:
                item.value = value
                return
        self.table[hash_index].append(Item(key, value))

    def get(self, key):
        hash_index = self._hash_function(key)
        for item in self.table[hash_index]:
            if item.key == key:
                return item.value
        raise KeyError('Key not found')

    def remove(self, key):
        hash_index = self._hash_function(key)
        for index, item in enumerate(self.table[hash_index]):
            if item.key == key:
                del self.table[hash_index][index]
                return
        raise KeyError('Key not found')

参考与下载

Python 下载 Python 源码

相关练习题

设计 HashMap

暂无相关练习题