Hash tables store key-value pairs by using a hash function to map keys to array positions. Collisions occur when different keys hash to the same position. Open addressing resolves collisions by probing to alternate positions using techniques like linear probing, quadratic probing, or double hashing. Chaining resolves collisions by storing keys at the same position in a linked list. Common hash functions include division, multiplication, mid-square, and folding methods.