根据一些教程,我应用了一个HashMap类,并且只使用了一个__get_hash_mod_size()方法,def __get_hash_mod_size(self, key): hash_key_var = hash(key+str(self.hahsmap_size*0.01)) return hash_key_var % self.hahsmap_size一切似乎都工作正常,但我不确定,我希望看到一些意见来改进它,或者是否可能存在任何问题或边缘情况?哈希映射class HashMap(): def __init__(self): self.hahsmap_size = 32 self.hashmap_data = [None] * self.hahsmap_size def __get_hash_mod_size(self, key): hash_key_var = hash(key+str(self.hahsmap_size*0.01)) return hash_key_var % self.hahsmap_size def set_key_value(self, key, value): key_var = self.__get_hash_mod_size(key) key_value_list = [key, value] if self.hashmap_data[key_var] is None: self.hashmap_data[key_var] = list([key_value_list]) return True else: for pair in self.hashmap_data[key_var]: print(pair) if pair[0] == key: pair[1] = value return True self.hashmap_data[key_var].append(key_value_list) return True def get_key(self, key): key_var = self.__get_hash_mod_size(key) if self.hashmap_data[key_var] is not None: for pair in self.hashmap_data[key_var]: if pair[0] == key: return pair[1] return None def remove_key(self, key): key_var = self.__get_hash_mod_size(key) if self.hashmap_data[key_var] is not None: return False for i in range(len(self.hashmap_data[key_var])): if self.hashmap_data[key_var][i][0] == key: self.hashmap_data[key_var].pop(i) return True def print_hashmap(self): for item in self.hashmap_data: if item is not None: print(item)
1 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
我hahsmap_size被拼错了。否则,这似乎是 Python 本身作为字典提供的工作实现。
也就是说,这段代码:
hm = HashMap()
hm.set_key_value('A', '1')
hm.set_key_value('A', '2')
hm.set_key_value('B', '1')
hm.set_key_value('A', '3')
hm.set_key_value('A', '4')
hm.set_key_value('C', '1')
hm.set_key_value('D', '1')
hm.set_key_value('E', '1')
hm.set_key_value('E', '2')
hm.remove_key('A')
hm.remove_key('B')
hm.remove_key('B')
hm.print_hashmap()
相当于但比这慢:
hm = {}
hm['A'] = '1'
hm['A'] = '2'
hm['B'] = '1'
hm['A'] = '3'
hm['A'] = '4'
hm['C'] = '1'
hm['D'] = '1'
hm['E'] = '1'
hm['E'] = '2'
hm.pop('A', None)
hm.pop('B', None)
hm.pop('B', None)
print(hm)
添加回答
举报
0/150
提交
取消