为了账号安全,请及时绑定邮箱和手机立即绑定

使用 hash() 方法的哈希映射

使用 hash() 方法的哈希映射

守着一只汪 2022-04-27 13:39:25
根据一些教程,我应用了一个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)


查看完整回答
反对 回复 2022-04-27
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信