Alexey
Используй одну map.В качестве значения храни wrapper в который входят оба ключа и собственно оригинальное значение. На put вставляешь по обоим ключам, на remove удаляешь по одному ключу, затем из wrapper берёшь 2 ключ и удаляешь по нему тоже. Наружу можно выставить как 2 map с разными типами ключей, внутри cast к Object. Недостаток - если ключ входит в 2 разных составных ключа то можно перетереть данные. Но и с 2 мапами проблема та же. Проще вряд ли сделать можно.
чет мне кажется, что это уже перебор со сложностью кода, тут хрен потом кто поймет зачем ты это запилил, лучше уж две мапы