提前致谢。
答案 0 :(得分:3)
Hashtables是Python的核心,既可以作为'dict'类型,也可以作为类和名称空间的实现,因此多年来已经对实现进行了改进和优化。您可以看到dict对象here的C源代码。
每个Python类型都实现自己的哈希函数 - 浏览其他对象的源代码以查看它们的实现。
答案 1 :(得分:2)
您的问题存在问题:哈希映射的类型与使用的一样多。
根据您的约束,有许多策略可以处理哈希冲突和重新分配。你可能会发现一个平均的解决方案,当然,大多数都适合,但如果我是你,我会看维基百科(像丹尼斯建议的那样)来了解各种实现的细微之处。
正如我所说,你可以通过两种方式来思考这些策略:
另外,您想要多线程支持吗?使用atomic
操作可以获得无锁的多线程哈希映射,如已在Java中通过Cliff Click(Google Tech Talk)验证
正如您所看到的,没有一种尺寸适合所有人。我会先考虑学习这些原则,然后再深入了解实现细节。
std::unordered_map
使用链表清单并冻结地图策略,不用担心STL正常同步。dict
是该语言的基础,我不知道他们选择的策略答案 2 :(得分:1)
如果您想学习,我建议您查看java.util.HashMap
的Java实现。这是明确的代码,记录良好且相对较短。承认,它既不是C,也不是C ++,也不是Python,但你可能不想阅读GNU libc ++即将推出的哈希表实现,最重要的是它包含了C ++标准模板库的复杂性。
首先,您应该阅读java.util.Map
接口的定义。然后,您可以直接跳转到java.util.HashMap
的详细信息。所有遗漏的东西都会在java.util.AbstractMap
中找到。
良好的散列函数的实现独立于编程语言。它的基本任务是将一个任意大的值集映射到一个小值集(通常是某种整数类型),以便生成的值均匀分布。