Clojure的地图界限和一致性(Clojure map limits and consistenc

2019-09-18 05:30发布

我想知道,考虑到Clojure中使用32位散列其地图实现,如果Clojure的地图也因此2 ^ 32-1键的限制(如果这是不正确的,如何管理冲突),如果它的哈希实现是一致的 。 TIA!

Answer 1:

Clojure的地图是一个自定义的实现,是持久的和不可改变的 (即使用Java包含HashMap,在一个不变的数据结构,使用时不能提供足够的性能)。

它使用32位的散列码,因此2 ^ 32个可能的散列桶 。 在碰撞的情况下,键和值被存储在用于每个散列桶所以有可能具有多于2 ^ 32个密钥的阵列。 看到PersistentHashMap源 -特别是HashCollisionNode内部类被用来存储密钥/值的桶针对单个哈希码值。

由于可能的散列桶的数量是固定的,一致的哈希值是不相关的 - 关键永远不需要重新映射。

也可以看看:

  • http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey (演示解释Clojure的方法并发还涵盖了持久不变的数据结构)


文章来源: Clojure map limits and consistency