вложенные хеш-карты неизвестной глубины Java - PullRequest
2 голосов
/ 16 марта 2011

У меня есть требование, в котором мне нужно иметь вложенную хэш-карту.Но глубина будет решена во время выполнения.Например, если во время выполнения пользователь говорит «3», то моя хэш-карта должна выглядеть как

HashMap<String, HashMAp<String, HashMap<String, String>>>

, если он говорит 4, то

HashMap<String, HashMAp<String, HashMap<String, HashMap<String, String>>>>

Есть ли способ реализовать такую ​​функциональность?Какой-то другой API или инструментарий ??

Ответы [ 3 ]

2 голосов
/ 03 февраля 2015
Лучше иметь 100 функций, работающих с одной структурой данных, чем 10 функций с 10 структурами данных.Алан Перлис.

То, что вы просите, реализовано в стандартной библиотеке Clojure: вопреки тому, что было сказано, вложенные хеш-карты являются очевидным и абсолютно разумным способом представления деревьев.`` `clojure (def my-tree {: a {: aa 0}: b 0: c {: cc 0: dd {: e 0})

(= (получить мое дерево [: c: dd: e]) 0) `` `

Вы также можете представить его через граф un objet, но вы потеряете универсальность hashmaps: объекты в любом случае являются концептуальными hashmaps с ограничениями на атрибуты itможет иметь.

2 голосов
/ 16 марта 2011

О, это почти наверняка очень плохая идея.

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

Не.

Вам будет лучше, если вы поймете, как правильно написать то, что вам нужно.

Нет библиотеки, чтобы делать то, что вы хотите, по очень веской причине - вы не должны.

0 голосов
/ 16 марта 2011

Конечно, вы можете определить хеш-карту с типом HashMap<String, ?> и получить динамическую глубину за счет безопасности типов.

Но Даффимо верен - вы, вероятно, неправильно используете структуру.Почему вам нужен такой тип?

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

...