2012-06-18 22 views
6

Clojure'un harita uygulaması için 32 bitlik karma kullanıldığını düşünürsek, Clojure haritasının 2^32-1 tuşlarının bir sınırı varsa (ve eğer bu doğru değilse çarpışmaları yönetir) ve eğer onun karma uygulaması consistent ise. TIA!Clojure harita sınırları ve tutarlılık

+0

Kaynak kodu baktınız mı:

Ayrıca bkz? – pmdj

+0

Evet, ancak tam olarak anlayamıyorum çünkü bir Java geliştiricisi değilim: hash işlevini anladığımdan, anahtarın bir Tamsayı olduğu ve Object isheq yönteminin anahtarı olduğu belirli bir durumda Tamsayıya delege eden bir hash. Ancak, eğer harita destek çarpışmaları ve karma fonksiyonu tutarlı ise, kullanılan karma işlevini anlayamıyorum (ya da geri izleyemiyorum)! –

+0

(Bazı indirimleri asla anlayamayacağım) –

cevap

10

Clojure haritaları olan özel bir uygulaması olan kalıcı ve sabit (yani, değişmez bir veri yapısı kullanıldığında yeterli performans sağlamamaktadır olur olup kullanımı Java hashmaps, yapar).

32 bit karma kodları kullanır, dolayısıyla 2^32 olası karma kovaları. Çarpışma durumunda, anahtarlar ve değerler, her bir hash kova için bir dizide saklanır, bu yüzden , 2^32 tuşundan daha fazla'a sahip olabilir. PersistentHashMap source - özellikle HashCollisionNode iç sınıfı, tek bir hashcode değerine karşı bir grup anahtar/değer depolamak için kullanılır.

Mümkün hash kovalarının sayısı sabitlendiğinden, tutarlı karışmaların önemi yoktur - anahtarın hiç bir zaman yeniden yapılması gerekmez.

+0

Gerçekten çok teşekkür ederim! –