Clojure 映射限制和一致性

2024-03-14

我想知道,考虑到 Clojure 使用 32 位哈希来实现其映射,因此 Clojure 映射是否有 2^32-1 个键的限制(如果这不是真的,它如何管理冲突)以及它的哈希是否实施是持续的 http://en.wikipedia.org/wiki/Consistent_hashing. TIA!


Clojure 映射是一个自定义实现持久且不可变(即它确实not使用Java hashmaps,当在不可变数据结构中使用时,它不会提供足够的性能)。

它使用 32 位哈希码,因此2^32 个可能的哈希桶。在发生冲突的情况下,键和值存储在每个哈希桶的数组中,因此可能有超过 2^32 个键。请参阅持久化HashMap源码 https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentHashMap.java- 特别是 HashCollisionNode 内部类用于根据单个哈希码值存储一桶键/值。

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

也可以看看:

  • http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey(演示文稿解释了 Clojure 的并发方法,但也涵盖了持久不可变数据结构)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clojure 映射限制和一致性 的相关文章

随机推荐