We introduced the concept of **‘Hash table’ **because we need a data structure that is suitable for search operations

One thing to remember is that ‘Hash tables’ are refined versions of ‘Arrays’

Why? Arrays are best suited for **‘accessibility’** and **‘search operations’** contains **‘accessibility operation’**

So we need to build **‘hash tables’** upon** ‘arrays’**

See in Hash tables we have **‘keys’** which in turn converted into **‘indices’** whereas in arrays we don’t have this liberty.

We will build a hash table in the array of 10 continuous slots(0–9)

We have 10 names to store and the requirement is easy to search or lookup

For that, we will convert characters into alphabetical positions and add the numbers

Note we have 10 continuous slots(0–9) but we have resulting numbers of more than 9.

So I divide the result by the number of slots and this will give us the remainder.

The remainder can never be more than the number of slots

There is a name to this operation called **‘Modulo operation’**

To reiterate, the hash function converts the key to some number

Then index is found by dividing it by array size

When you notice the above table we have remainders for Finch, Jane and Ross, Lisbon.

We have only one slot but two names

When you encounter this type of scenario, it is called **‘Hash Collision’**

Hash Collision = Same output(Index) for different input(Key)

There are many ways to avoid this collision

Before that let us identify the stakeholders here.

Hash function, Array size, Index or different data structure in case of collision

1)Hash Function — Try to put functions that avoid collision(Obvious)

2)ArraySize — Try to increase the array size and hence modulo operator range will increase

3)Index — When collision comes, just start looking for the next available empty slot and store the element

4)Different data structures — Have an array of pointers. Pointers points to next location(Yes! Linked list)

5)In fact, we usually implement a mix of all the above to get the best result.