В идеале, выбор может быть лучше всего обусловлен тем, что естественно для области проблемы / решения. Ключ представляет что-либо в домене? Map представляет что-либо в домене? Использование одноуровневой или двухуровневой косвенности может быть деталью реализации, которую вы в конечном итоге захотите скрыть.
Однако, если это чисто решение по производительности, при прочих равных условиях (например, шаблон доступа не поддерживает тот или иной путь, хорошая хеш-функция, разреженная карта и т. Д.), Я думаю, HashMap , Z> будет быстрее, чем HashMap > - я хочу думать, что 1 поиск в большем HashMap быстрее, чем 2 поиска на маленьких картах.
Поскольку у вас есть логический ключ, также рассмотрите две таблицы HashMap (одну для true и одну для false) и несколько троичных операторов (? :) magic вместо:
final Map<Class, String> falseMap = new HashMap<Class, String>();
final Map<Class, String> trueMap = new HashMap<Class, String>();
final String s = ((booleanKey ? trueMap: falseMap).get(classKey));