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

根据一些教程,我应用了一个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)

守着一只汪
浏览 90回答 1
1回答

繁花不似锦

我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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python