美文网首页
如何实现一个 Map

如何实现一个 Map

作者: 琦思妙想君 | 来源:发表于2018-05-14 20:31 被阅读23次

和同事聊天的时候提到了一个有趣的面试题,如何实现一个 Map

Map 的核心在于哈希,利用哈希在一段连续的存储空间上实现键值对存储。

假设现有一段连续的存储空间,有一组 key 和 value 需要存储。

首先将 key 哈希成值,映射到存储空间的某个地址,在这个地址上存储下 key 和对应的 value,读取时采用同样的哈希算法将 key 哈希后映射到地址,由于是直接寻址,效率要比数组高的多。

还有一个关键问题就是如何处理碰撞,即两个不同的 key 哈希后映射到同一个地址了,教科书上有各种方法的总结,我们讨论了两种:

方法一,向后延续,即碰撞后将后来的键值对存储在映射地址的下一个地址。

方法二,使用链表,将映射的地址指向一个链表,将映射到此地址的键值对都添加到链表里。

解决碰撞有一个先决条件就是要在存储空间中同时记录 key 和 value,防止在读取时无法分辨碰撞的 value

相关文章

  • 如何实现一个 Map

    和同事聊天的时候提到了一个有趣的面试题,如何实现一个 Map Map 的核心在于哈希,利用哈希在一段连续的存储空间...

  • Golang主要数据类型的结构

    map Golang的map采用的是hash表来实现的。我们知道hash映射中必须要解决一个问题:如何有效避免ha...

  • 分析HashMap的散列表设计

    HashMap是Map接口的一个实现。Map的实现都是一个容器,用于存储键值对。 Map并不一定要通过散列表实现,...

  • 如何声明一个Map对象

    Map集合概述1、map是一个接口,所以我使用map的实现类2、map的实现主要有三个常用 HashMap,Tre...

  • 如何设计并实现一个线程安全的 Map ?(下篇)

    在上篇中,我们已经讨论过如何去实现一个 Map 了,并且也讨论了诸多优化点。在下篇中,我们将继续讨论如何实现一个线...

  • RxSwift(6)-高阶函数

    映射 map map用于将可观察序列中的元素进行新的转换,返回新的观察序列。 运行结果如下: 那么map是如何实现...

  • C++大厂面试真题

    C++标准库的map和set有什么区别,如何实现的? map和set都是C++的关联容器,其底层实现都是红黑树。 ...

  • hash map 实现原理

    HashMap 的存取实现 1.1 put refrencehash map实现hash map实现原理

  • C++常用容器原理

    1. map 与unordered_map map:内部实现是一个红黑树,按key有序的unordered_map...

  • RxJava2

    Map和FlatMap的区别 如何实现线程并发 subscribeOn和observeOn 背压的原理

网友评论

      本文标题:如何实现一个 Map

      本文链接:https://www.haomeiwen.com/subject/kmkqdftx.html