

Data Structures in Clojure: Hash Tables - defect
http://macromancy.com/2014/02/03/data-structures-clojure-hash-tables.html

======
Jach
I love these posts. Even though I'd never use this in production, it's an
excellent intro to the same basic data structure taught everywhere. But
instead of mucking with a templated C++ implementation (or getting lost in the
"plain cons cells for everything!" weeds)... Clojure! It also shows that as
much as idiomatic Clojure frowns on OOP and mutability... it's not really that
unpleasant to read. I almost want to go through all my old C++ assignments and
redo them in Clojure like this.

~~~
gleenn
Totally agree. Most Clojure code I read is far from easy to jump into for an
amateur like myself. It is awesome to see some well-explained and simple code
that you can learn from like this.

------
vinkelhake
> On the machine this was implemented, insertion speed increased ~110x,
> compared with the non-hinted implementation.

That makes it sound like type hints are essentially mandatory for anything
where performance matters.

Nice article! It would have been interesting to see how it fares against
something like java.util.HashMap.

~~~
zephjc
Yeah, the less runtime reflection you make it use, the better the speed gains
(I'm glad type hints are optional though).

~~~
DigitalJack
I only start type hinting if performance has proven to be a problem.

------
copx
Where is the definition of the actual hash function? That is the interesting
and tricky part of a hash table. Is "hash" a Clojure built-in?

~~~
shriphani
Clojure has a built-in hash which (I believe) returns the value of
<your_obj>.hashCode() [the one java provides].

~~~
dantiberian
You are correct, (hash x) returns x.hashCode() from Java
[http://clojuredocs.org/clojure_core/clojure.core/hash](http://clojuredocs.org/clojure_core/clojure.core/hash)

------
the_french
Very nitpicky but I find the ligatures on all the "t" characters very
distracting.

Additionally, I don't know Closure, but are there any default hash-table
implementations? If so, how does this implementation compare against the base
one?

~~~
brandonbloom
It's Clojure with a "j".

Clojure provides Persistent Hash Tries (look them up) as well as several other
immutable map implementations. Mutable maps are provided by the Java base
class libraries.

