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. <hubag...@gmail.com<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 clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <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 clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en