软件测试面经 | 数据结构hashmap不用map如何实现?

要实现一个哈希表(Hash Map)而不使用编程语言提供的内置 Map 数据结构,您可以自己构建一个简单的哈希表。哈希表的核心思想是将键(key)映射到对应的值(value),以实现快速的查找和插入操作。以下是一个基本的哈希表实现示例,使用 Python 语言来说明:

pythonCopy codeclass HashMap:
    def __init__(self, size):
        self.size = size
        self.table = [None] * size

    def hash(self, key):
        # 简单的哈希函数,将键转化为索引
        return hash(key) % self.size

    def insert(self, key, value):
        index = self.hash(key)
        if self.table[index] is None:
            self.table[index] = [(key, value)]
        else:
            for i, (existing_key, _) in enumerate(self.table[index]):
                if existing_key == key:
                    # 如果键已存在,则更新对应的值
                    self.table[index][i] = (key, value)
                    return
            self.table[index].append((key, value))

    def get(self, key):
        index = self.hash(key)
        if self.table[index] is not None:
            for existing_key, value in self.table[index]:
                if existing_key == key:
                    return value
        raise KeyError(key)

    def remove(self, key):
        index = self.hash(key)
        if self.table[index] is not None:
            for i, (existing_key, _) in enumerate(self.table[index]):
                if existing_key == key:
                    del self.table[index][i]
                    return
        raise KeyError(key)

上述示例演示了一个简单的哈希表实现,包括插入(insert)、查找(get)、删除(remove)等基本操作。这个示例中的哈希函数是一个简单的取余操作,您可以根据实际需求选择更复杂的哈希函数来提高性能和均匀分布性。

请注意,这个示例中的哈希表并没有处理哈希冲突,即多个键映射到相同的索引的情况。在实际应用中,您可能需要实现一种解决冲突的方法,如链地址法(Chaining)或开放地址法(Open Addressing)。

此外,这个示例是一个简单的教育性演示,实际应用中的哈希表可能需要更多的功能和优化,如动态调整大小、性能优化、哈希冲突处理等。不过,它可以帮助您理解哈希表的基本原理和实现方式。

#软件测试##测试开发##霍格沃兹测试开发学社##人工智能#
全部评论

相关推荐

头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3 投递、测评3.12 笔试3.18 一面3.25 二面4.13 ai面(hr面)4.14 英语测评4.23 offer(已拒)腾讯:2.6 测评2.28 wxg一面3.5 wxg二面(挂)3.11 teg一面3.21 teg二面(取消)3.31 teg一面4.10 teg二面(挂)4.21 wxg一面4.24 wxg二面(挂)字节:1.28 aml约面(取消)3.17 火山一面(挂)4.8 aml一面(挂)4.20 抖音data一面(挂)阿里:3.23 投递、测评3.28 笔试3.31 淘天一面4.8 钉钉一面4.9 淘天二面4.10 阿里控股一面4.12 钉钉二面(取消)4.15 淘天hr面4.16 淘天offer(已接)4.21 高德一面(取消)4.22 淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
绿糖滑稽:携程这什么雷霆流程时长
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务