P2PKH and P2SH aren't keys, they are script types, and Hash160 is a hash function or rather combination of two (SHA256 and RIPEMD160).
In bitcoin when you send coins to someone else, you are lock those coins up by creating a "condition" that only when you fulfill requirements of that condition you could "unlock" or "spend" those coins. Some of these "common" conditions have special names.
For example P2PKH is one of the most common public scripts. The condition says that the owner must first provide a public key that when hashed using HASH160 function would produce a digest equal to the 20 bytes that is included inside the script and the signature alongside the public key provided would be a valid ECDSA signature for the provided transactions.
We have so many different types because we have so many different needs.
You might want to pay to one public key so you use P2PKH, you may want to add a specific time to the condition where coins could not be spent before that deadline is reached in which case you use CheckLockTimeVerify script type, you may want to create a complicated condition (such as paying multiple public keys aka multisig) and only reveal the hash of it so you use P2SH (of course P2SH isn't limited to multisig), and so on.
There is also new features such as Segregated Witness which defines new public script types. P2WPKH or P2WSH and some more are among them.
More on scripts:
https://en.bitcoin.it/wiki/Script