【问题标题】:nested hashmaps of unknown depth java未知深度java的嵌套哈希图
【发布时间】:2011-03-15 23:49:40
【问题描述】:

我有一个要求,我需要一个嵌套的哈希图。但是深度将在运行时决定。 例如。如果在运行时,用户说 3, 那么我的 hashmap 应该像

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

如果他说 4 那么

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

有没有办法实现这种功能?其他一些 API 或工具包??

【问题讨论】:

  • 这称为树。 API 中没有通用接口,但I proposed one in another answer。 (这个答案中还有一个树状接口(和实现)列表,也许其中一个适合您的目的。

标签: java nested hashmap depth


【解决方案1】:

哦,这几乎可以肯定是一个非常糟糕的主意。

您听起来好像真的想要一棵树或图但不知道如何编写它,因此您发明了这种表示法以尝试使其与 HashMap 一起使用。

不要。

弄清楚如何正确地写出你需要的东西会更好。

没有图书馆可以做你想做的事,这是有充分理由的——你不应该这样做。

【讨论】:

  • +1 - 哈希映射是一种非常麻烦且昂贵的表示树的方法。
【解决方案2】:
  1. 100 个函数在一个数据结构上运行比 10 个函数在 10 个数据结构上运行要好。 艾伦·佩利斯。

您所问的问题在 Clojure 的标准库中实现:与之前所述相反,嵌套哈希图是表示树的明显且绝对合理的方式。 ```clojure (定义我的树 {:a {:aa 0} :b 0 :c {:cc 0 :dd {:e 0})

(= (get-in my-tree [:c :dd :e]) 0) ```

你也可以通过非对象图来表示它,但你会失去 hashmap 的一般性:对象无论如何都是概念上的 hashmap,但它可以拥有的属性受到限制。

【讨论】:

    【解决方案3】:

    您当然可以定义类型为HashMap&lt;String, ?&gt; 的哈希映射,并以类型安全为代价获得动态深度。

    但是 duffymo 是正确的——你可能误用了这个结构。为什么要这样的类型?

    您可能想查看this article on trees。您可能会发现它很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2017-03-29
      • 2013-04-21
      • 1970-01-01
      相关资源
      最近更新 更多