Open Addressing
The opposite of chaining. No linked lists, just one big array. If the slot for your key is taken by someone else, walk forward until you find an empty one (linear probing) or jump in a pattern (quadratic probing, double hashing).
want to place "ant" at index 3
buckets: [ . . . [apple] [ . ] . . . ]
index: 0 1 2 3 4 5 6 7
index 3 taken → try 4 → empty → place "ant" there
Better cache behaviour than chaining, trickier deletion (you can’t just blank a slot, you’d break the probe chain). Python’s dict uses it.