Является ли хорошей практикой использование рекурсивной карты (Map of Maps) - PullRequest
0 голосов
/ 23 мая 2018

Я нашел этот старый фрагмент кода, который использует карту Map of Map:

Map<String, Map<Long, Map<String, String>>> sMap = null;

Помимо добавления ненужной сложности к коду, усложняется модульное тестированиеclass.

Однако мой менеджер сказал, что рекомендуется использовать Map of Map, поскольку это повышает эффективность использования контейнера контейнера.Какие-нибудь мысли ?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Не рекомендуется писать код, который сложно поддерживать.

«Эффективность» - это распространенная ловушка, которая тратит впустую время (и деньги) разработчика, потому что почти невозможно понять, какие части системы должны быть эффективными - и как точно они должны быть эффективными - до того, как вы получитеработающие системы и на самом деле способны измерять вещи.Даже в этом случае запуск кода на более качественном оборудовании зачастую обходится дешевле, чем затрачивание времени программистами на повышение эффективности.

Тем не менее, идея Карты Карт является ценной, и уже есть классы, которые внедряют эту концепцию вболее дружественные к программисту способы.Например, Таблица в Guava или, возможно, даже Мультикарта может быть подходящей.

Вы также можете создать классы, подобные коллекции , названные в терминах концепций домена., которые используют Карты для внутреннего использования, таким образом скрывая сложность и делая код более понятным.

0 голосов
/ 23 мая 2018

Это зависит.Но я просто хочу упомянуть здесь альтернативу, которая может подходить или не подходить для вашего случая использования: иметь один уровень карты с настраиваемым типом ключа.

class MyMapKey {
  public String a;
  public long b;
  public String c;
  // Implement equals() and hashCode() (or tell your IDE to do it)
}

Map<MyMapKey, String> sMap = null;

Как правило, это спасает васмного проверок null при переходе вниз по уровням карты, что упрощает код.Но вы больше не можете эффективно перебирать все элементы, для которых a установлен, например, "zoidberg".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...