We've seen searches that allow you to look through data in *O*(*n*) time, and
searches that allow you to look through data in *O*(*logn*) time, but imagine
a way to find exactly what you want in *O*(1) time. Think it's not possible?
Think again! Hash tables allow the storage and retrieval of data in an
average time of *O*(1).

At its most basic level, a hash table data structure is just an array. Data
is stored into this array at specific indices designated by a
hash function. A hash function is a mapping between the set of input
data and a set of integers.

With hash tables, there always exists the possibility that two data elements
will hash to the same integer value. When this happens, a collision
results (two data members try to occupy the same place in the hash table
array), and methods have been devised to deal with such situations. In this
guide, we will cover two methods, linear probing and separate chaining,
focusing on the latter.

Hashing has uses elsewhere besides in hash tables. Certain string matching
algorithms, for example Rabin-Karp, take advantage of hashing to do string
searching in linear time as opposed to the quadratic time of the normal
brute-force string searching algorithm.