Possible Duplicate:
What exactly are hashtables?
I understand the purpose of using hash functions to securely store passwords. I have used arrays and arraylists for class projects for sorting and searching data. What I am having trouble understanding is the practical value of hashtables for something like sorting and searching.
I got a lecture on hashtables but we never had to use them in school, so it hasn’t clicked. Can someone give me a practical example of a task a hashtable is useful for that couldn’t be done with a numerical array or arraylist? Also, a very simple low level example of a hash function would be helpful.
Basically, hashtables have similar performance characteristics (cheap lookup, cheap appending (for arrays – hashtables are unordered, adding to them is cheap partly because of this) as arrays with numerical indices, but are much more flexible in terms of what the key may be. Given a continuous chunck of memory and a fixed size per item, you can get the adress of the
nth item very easily and cheaply. That’s thanks to the indices being integers – you can’t do that with, say, strings. At least not directly. Hashes allows reducing any object (that implements it) to a number and you’re back to arrays. You still need to add checks for hash collisions and resolve them (which incurs mostly a memory overhead, since you need to store the original value), but with a halfway decent implementation, this is not much of an issue.So you can now associate any (hashable) object with any (really any) value. This has countless uses (although I have to admit, I can’t think of one that’s applyable to sorting or searching). You can build caches with small overhead (because checking if the cache can help in a given case is O(1)), implement a relatively performant object system (several dynamic languages do this), you can go through a list of
(id, value)pairs and accumulate the values for identicalids in any way you like, and many other things.