2012-06-18 6 views
6

Clojureマップが2^32-1キーの制限を持っている場合、Clojureがマップ実装に32ビットのハッシュを使用することを考慮したいと思います。それは衝突を管理します)、そのハッシュ実装がconsistentである場合 TIA!Clojureマップの制限と一貫性

+0

は、あなたがソースコードを見たことがありますか? – pmdj

+0

しかし、私はJavaの開発者ではないので、完全に理解できません。ハッシュ関数は、キーがIntegerでObject hasheqメソッドをキーとする特定のケースでIntegerに委譲するhasheqです。しかし、マップが衝突をサポートしていて、ハッシュ関数が一貫している場合、使用されているハッシュ関数を理解することはできません(またはバックトレース)。 –

+0

(私はいくつかのdownvotesを理解することはありません) –

答えて

10

Clojureのマップ(すなわち、それが不変のデータ構造で使用される場合、十分な性能を提供しないのJavaハッシュマップを使用していない)永続的不変であるカスタム実装です。

これは32ビットのハッシュコードを使用するため、2^32の可能なハッシュバケットです。衝突の場合、キーと値は各ハッシュバケットの配列に格納されるため、は2^32個以上のキーを持つことが可能ですPersistentHashMap sourceを参照してください。特に、HashCollisionNode内部クラスは、単一のハッシュコード値に対してキー/値のバケットを格納するために使用されます。

可能なハッシュバケットの数は固定されているので、一貫したハッシュは無関係です。鍵を再マップする必要はありません。

も参照してください:

+0

本当にありがとう! –