DataStructure для реализации чего-то вроде вложенных карт? - PullRequest
0 голосов
/ 25 июля 2011

Я хочу иметь карту, которая допускает древовидное поведение.Я хочу иметь возможность определить карту из строки в объект, который может быть другой картой или строкой:

    Map<String,(String OR Map)>

Единственный способ, которым я думаю, что я знаю, как это сделать, это через шаблон посетителя,Есть ли уже созданная структура данных, которая реализует это?

ОБНОВЛЕНИЕ: Вот контекст: я хочу проанализировать форму, отправленную через запрос на публикацию.Форма является многоуровневой и может иметь произвольное количество полей (выбирается пользователем).Я решил назвать поля в форме цифрами:

  1. Пользователь | имя
  2. процессор | 1 | скорость
  3. процессор | 1! имя
  4. процессор | 2 | скорость
  5. диск | 1 | имя
  6. диск | 2 | имя

Я решил разбить егов |а затем создайте древовидную структуру, чтобы она выглядела примерно так:

  • Пользователь
    • имя = все, что пользователь вводит
  • Процессор
    • 1
      • скорость = все, что пользователь вводит
      • имя = все, что пользователь вводит
    • 2
      • скорость= все, что пользователь вводит
  • Диск
    • 1
      • name = все, что пользователь вводит
    • 2
      • name = независимо от того, что пользователь вводит

Только последние листья будут содержать строки.Не так много полей, поэтому я чувствовал, что использование карты может быть немного излишним, но, честно говоря, я действительно не знал, как сделать это с чем-то еще.

Ответы [ 3 ]

3 голосов
/ 25 июля 2011

Введите объект, представляющий String или Map.Предположительно, вы используете их таким образом, чтобы иметь общее поведение?Это может быть абстрагировано от общего базового класса, и это немного похоже на составной шаблон (древовидное поведение).Например:

interface StructuredObject {}

class Leaf implements StructuredObject {}

class Composite implements StructuredObject {}

Map<String, StructuredObject> map = ...;

Как вы указали, вы можете использовать шаблон посетителя для перемещения по карте и избежать приведения типов.

0 голосов
/ 25 июля 2011

В Google Collections есть очень хороший API MultiMap для этого варианта использования

0 голосов
/ 25 июля 2011

Большинство реализаций карты имеют значения определенного типа.Если вам нужно несколько типов значений, вы можете сделать это, обернув карту по вашему выбору, например TreeMap.

...