Hash Tables

Key-to-value lookup in average O(1) via hashing into buckets.

What is a hash table?

A hash table stores key → value pairs. A hash function turns each key into a number, then that number picks a bucket — a slot in an array. Most of the time you jump straight to the right bucket, so lookups feel like O(1) on average.

Key
The label you look things up by — a name, an id, a word
Value
Whatever you store under that key — a count, an index, an object
Hash
A number computed from the key; same key → same hash
Bucket
One slot in the underlying array where that hash lands
Collision
Two keys hash to the same bucket — the table needs a plan (a chain, or a probe)

See it: key → hash → bucket

Watch a key fly into the hash function. The function spits out a bucket index, and the pair lands in that slot — like dropping a coat at the numbered hook the attendant gives you.

When a second key hashes to the same hook, it chains on — a short linked list in that bucket. Collisions are normal; good tables just keep chains short.

Key flies in · hash picks a bucket · collision chains
Hashingready

Same key always lands in the same bucket. Collisions share a chain.

Types of hash tables

Two big design choices: how you handle collisions, and what the API stores. Chaining hangs a list off each bucket. Open addressing finds another empty slot in the array when a bucket is taken.

In TypeScript, Map is key → value. Set is “keys only” — a membership bag with the same hashing idea underneath.

Collision strategy · Map vs Set
FocusHash table

Collisions answer “where if taken?” API answers “value or membership?”

How it is stored in memory

Declaring a Map keeps a reference on the call stack. The real table lives on the heap: an array of buckets, and — with chaining — short lists hanging off the busy slots.

Press Next to declare, allocate buckets, then hang a chain after a collision.

Declare → buckets → chain
StatusPress Next to declare map

Start here. Each step highlights the TypeScript below.

Step 1 of 4

Operations

Everyday work is hash, then touch one bucket. On average that is O(1) — get, set, delete, and has all tell the same story. Iterating keys walks every entry, so that one is O(n). For Map/Set methods and snippets, open the Functions tab.

Get

Hash the key, open that bucket, walk a short chain until the key matches — or the chain ends.

Read one key
Statushash

Hash "tea" → land in bucket 2. Peek the chain.

Step 1 of 2

Set / put

Hash, then write. Empty bucket gets a new link; an existing key just updates its value.

Store a pair
Statushash

Put "lin" → 29. Hash picks bucket 1.

Step 1 of 2

Delete

Find the link in the bucket’s chain and unlink it. Neighbors in other buckets do not move.

Remove a key
Statusfind

Delete "ada". Hash to bucket 0 and walk the chain.

Step 1 of 2

Has

Same path as get, but you only ask “is it there?” — no value to return.

Ask if a key exists
Statusprobe

Ask has("zoe"). Hash lands in bucket 3.

Step 1 of 2

Iterate keys

Walk every non-empty bucket and yield each key. Cheap per entry, linear in the whole table.

Visit every key
Statuswalk

Iterate keys: visit bucket 0 chain first.

Step 1 of 3