Hash Clojure映射的极限和一致性
我想知道,考虑到Clojure在其映射实现中使用32位哈希,Clojure映射是否因此限制了2^32-1个键(如果不是这样,它如何管理冲突),以及它的哈希实现是否正确。Hash Clojure映射的极限和一致性,hash,map,clojure,hashmap,Hash,Map,Clojure,Hashmap,我想知道,考虑到Clojure在其映射实现中使用32位哈希,Clojure映射是否因此限制了2^32-1个键(如果不是这样,它如何管理冲突),以及它的哈希实现是否正确。 蒂亚 Clojure映射是一种自定义实现,它是持久的、不可变的(即,它不使用Java hashmaps,在不可变的数据结构中使用Java hashmaps将无法提供足够的性能) 它使用32位哈希代码,因此2^32个可能的哈希桶。在发生冲突的情况下,每个哈希桶的键和值都存储在一个数组中,因此可能有超过2^32个键。请参阅-尤其是H
蒂亚 Clojure映射是一种自定义实现,它是持久的、不可变的(即,它不使用Java hashmaps,在不可变的数据结构中使用Java hashmaps将无法提供足够的性能) 它使用32位哈希代码,因此2^32个可能的哈希桶。在发生冲突的情况下,每个哈希桶的键和值都存储在一个数组中,因此可能有超过2^32个键。请参阅-尤其是HashCollisionNode内部类,它用于根据单个hashcode值存储一个键/值桶 因为可能的散列桶的数量是固定的,所以一致的散列是不相关的——密钥永远不需要重新映射 另见:
- (演示文稿解释了Clojure的并发方法,但也涵盖了持久不变的数据结构)