用于实现嵌套地图等内容的数据结构?

时间:2011-07-25 08:25:40

标签: java design-patterns data-structures map visitor-pattern

我想要一张允许树状行为的地图。我希望能够定义从字符串到对象的Map,可以是另一个映射,也可以是字符串:

    Map<String,(String OR Map)>

我认为我知道如何做的唯一方法是通过访客模式。是否有已经实现的数据结构?

更新: 以下是上下文: 我想解析通过邮寄请求提交的表单。表单是多级的,可以有任意数量的字段(由用户选择)。我决定做的是在表格中用数字命名字段:

  1. 用户|名称
  2. 处理器| 1 |速度
  3. 处理器|!1名
  4. 处理器| 2 |速度
  5. 磁盘| 1 |名称
  6. 磁盘| 2 |名称
  7. 我决定将其分解为|然后创建一个类似树的结构,所以它看起来像这样:

    • 用户
      • name =用户输入的内容
    • 处理器
      • 1
        • speed =无论用户输入什么
        • name =用户输入的内容
      • 2
        • speed =无论用户输入什么
    • 磁盘
      • 1
        • name =用户输入的内容
      • 2
        • name =用户输入的内容

    只有最后一片叶子会包含字符串。没有那么多的领域,所以我有一种感觉使用Map可能有点矫枉过正,但说实话,我真的不知道如何用其他任何东西来做这件事。

3 个答案:

答案 0 :(得分:3)

引入代表StringMap的对象。大概是你以一种有共同行为的方式使用它们?这可以被抽象为一个公共基类,它听起来有点像composite pattern(树状行为)。例如:

interface StructuredObject {}

class Leaf implements StructuredObject {}

class Composite implements StructuredObject {}

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

正如您所指出的那样,您可以使用访问者模式遍历地图并避免类型转换。

答案 1 :(得分:0)

大多数地图实现都具有特定类型的值。如果您想要多种值类型,可以通过打包您选择的地图来完成此操作,例如:一个TreeMap。

答案 2 :(得分:-1)

Google Collections为此用例提供了一个非常好的API MultiMap