There are three main methods for mapping memory addresses to cache addresses: direct mapping, associative mapping, and set-associative mapping. Direct mapping maps each block of main memory to a single block in cache in a one-to-one manner. Associative mapping allows any block of main memory to be mapped to any block in cache but requires tag bits to identify blocks. Set-associative mapping groups cache blocks into sets, with a main memory block mapped to a particular set and then flexibly to a block within that set, providing more flexibility than direct mapping but less complexity than full associative mapping.