Mapa com chave bidimensional em java

Eu quero um mapa indexado por duas chaves (um mapa no qual você coloca E recupera valores usando duas chaves) em Java. Só para esclarecer, estou procurando o seguinte comportamento:

map.put(key1, key2, value); 
map.get(key1, key2); // returns value
map.get(key2, key1); // returns null
map.get(key1, key1); // returns null

Qual é o melhor caminho para isso? Mais especificamente, devo usar:

Map<K1,Map<K2,V>>

Map<Pair<K1,K2>, V>

De outros

(onde K1, K2, V são os tipos de primeira chave, segunda chave e valor, respectivamente)

questionAnswers(7)

yourAnswerToTheQuestion