6

我想知道,考虑到 Clojure 使用 32 位哈希来实现其映射,如果 Clojure 映射因此具有 2^32-1 个键的限制(如果这不是真的,它如何管理冲突)以及它的哈希执行是一致的。蒂亚!

4

1 回答 1

11

Clojure 映射是一种持久且不可变的自定义实现(即它不使用Java 哈希映射,在不可变数据结构中使用时无法提供足够的性能)。

它使用 32 位哈希码,因此有 2^32 个可能的哈希桶。在冲突的情况下,键和值存储在每个哈希桶的数组中,因此可能有超过 2^32 个键。请参阅PersistentHashMap 源- 特别是 HashCollisionNode 内部类用于针对单个哈希码值存储一桶键/值。

由于可能的哈希桶的数量是固定的,因此一致的哈希是无关紧要的——密钥永远不需要重新映射。

也可以看看:

于 2012-06-18T17:02:04.167 回答