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
cevap
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.
- http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey (sunum eşzamanlılık için Clojure yaklaşımını açıklayan değil, aynı zamanda kalıcı iletmenin veri yapıları kapsar)
Gerçekten çok teşekkür ederim! –
Kaynak kodu baktınız mı:
Ayrıca bkz? – pmdj
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)! –
(Bazı indirimleri asla anlayamayacağım) –