составной ключ v / s 2 уровня косвенности - PullRequest
0 голосов
/ 09 июня 2009
HashMap<Pair<Class<T>,Boolean>,String> abc = new HashMap<Pair<Class<T>,Boolean>,String>();

У меня есть два подхода ... создайте ключ {class, Boolean} -> {string}, или я мог бы также сделать это.

{class} -> {Boolean, string}

у первого подхода есть 1 уровень косвенности, у второго - 2 ... какие плюсы и минусы здесь? Второй подход плох?

1 Ответ

2 голосов
/ 09 июня 2009

В идеале, выбор может быть лучше всего обусловлен тем, что естественно для области проблемы / решения. Ключ представляет что-либо в домене? 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...