Лучшие практики вложенных хэш-карт?

#java #data-structures #tree #hashmap

#java #структуры данных #дерево #hashmap

Вопрос:

Я довольно часто использую вложенные словари и LinkedHashMaps. Это заставляет меня задуматься, это хорошая практика или я должен использовать какую-то другую структуру данных. Часто мои карты имеют трехмерный характер.

 LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>> mapOfOIDS = new LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>>
 

С этим часто бывает сложно работать, и мне было интересно, есть ли лучший подход? Для этого экземпляра я хочу смоделировать ряд уникальных имен хостов, у которых есть список уникальных номеров портов, у которых есть список уникальных идентификаторов OID.

Комментарии:

1. Это зависит от того, как просматриваются данные. Если вам нужно выполнить поиск на основе промежуточной информации, могут подойти вложенные карты. Однако, если вы выполняете поиск только на основе имени хоста, может быть проще работать с одной картой string-> class (где class находится класс POD, содержащий порты и OID, и тому подобное).

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

Ответ №1:

На самом деле вы можете объединить три String ключа в один, используя какой-то разделитель. Пусть текущие данные в соответствии с вашей реализацией будут { "abc" :{ "qwe" : {"qaz" : "MYDATA"}}} здесь, вы могли бы объединить три ключа в один as abc~qwe~qaz . Таким образом, результирующая карта будет {"abc~qwe~qaz" : "MYDATA"}