Вложенные карты <K, V> вместо List <Object []> в качестве возвращаемых значений. Любые проблемы? - PullRequest
2 голосов
/ 14 августа 2010

Ситуация возникает при получении некоторых данных из базы данных для составления отчета, сгруппированного по различным полям.Например, сгруппированы по месяцам, затем введите, а затем фактические против прогнозирования.Запрос к базе данных возвращает просто List .Но скучно напрямую отображать его в виде таблицы HTML.Что я делаю, так это группирую данные на карте >> .Это можно сделать простым способом, и если я использую TreeMap , данные автоматически сортируются для меня.Полученный код JSP намного проще.

Есть ли проблемы с этим подходом?(память, скорость или что-то еще?)

Ответы [ 2 ]

2 голосов
/ 14 августа 2010

Средство рендеринга HTML не должно знать детали реализации вашего DAO.

Я думаю, для вас, DAO, что вернуть List<Object[]> проще, чем вернуть Map<Integer, Map<String, Map<Type, Integer>>>. Каждый интерфейс класса должен быть легким для понимания, поэтому я бы использовал List<Object[]>.

Если визуализировать таблицу HTML проще, используя Map<Integer, Map<String, Map<Type, Integer>>>, возможно, лучше создать метод для преобразования List<Object[]> в Map<Integer, Map<String, Map<Type, Integer>>>.

Таким образом вы сохраняете свой пользовательский интерфейс отделенным от классов базы данных.

Вы также спрашивали о памяти и скорости. Я думаю, что лучший подход - это протестировать обе ситуации и использовать профилировщик, чтобы определить, действительно ли это проблема.

1 голос
/ 14 августа 2010

Есть ли проблемы с этим подходом? (память, скорость или что-то еще?)

TreeMap будет использовать больше памяти, чем ArrayList, и, вероятно, чем LinkedList. Это может быть медленнее ... или быстрее ... в зависимости от того, как именно списки сортируются и используются.

Но есть вероятность, что разница не будет заметна, если структуры данных не будут действительно большими. Лучший подход - начать с той структуры данных, которая дает вам самый простой и надежный код. Если (и только если) производительность заметно снижается, следует потратить время на оптимизацию, и только в том случае, если профилирование говорит вам, что это является причиной проблем с производительностью.

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