Thanks, never knew about this hashtable threshold factor.
On Saturday, August 11, 2012 1:01:02 AM UTC+3, Tamreen Khan (Scriptor)
wrote:
>
> It's not dependent on whether it's a literal but on the size of the map, 8
> key-value pairs is the threshold.
>
> This results in a PersistentHashMap
> (class {1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9}) =>
> clojure.lang.PersistentHashMap
>
> This gets you a PersistentArrayMap
> (class {1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8}) =>
> clojure.lang.PersistentHashMap
>
> You can see where this happens in the source here:
> https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentArrayMap.java#L115
>
> HASHTABLE_THRESHOLD is a constant set to 16, 8 keys and 8 values. So when
> you assoc onto an arraymap with 8 key-value pairs it returns a hashmap.
>
> The reason for this, as far as I understand it, is that with small
> hashmaps it's more efficient to do simple copy-on-write. In other words
> when you assoc onto it, it copies the entire map, adds the new key-value
> pair to the copy, and then returns the copy. With larger hashmaps, it
> becomes more useful to do use a more complicated tree structure which uses
> structural sharing so that assoc doesn't copy the entire map. Copying a
> small 5 element map isn't a big deal, but copying one with several thousand
> elements is.
>
> On Fri, Aug 10, 2012 at 5:43 PM, Hussein B. <[email protected]<javascript:>
> > wrote:
>
>> Hi,
>> Why Clojure map literal creates an instance of array map but not hash map?
>> What are the advantages of array map over hash map?
>> Thanks.
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected]<javascript:>
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>
>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en