我有一个要求,我需要一个嵌套的哈希图。但是深度将在运行时决定。例如,如果在运行时,用户说 3,那么我的 hashmap 应该是
HashMap<String, HashMAp<String, HashMap<String, String>>>
如果他说 4 那么
HashMap<String, HashMAp<String, HashMap<String, HashMap<String, String>>>>
有没有办法实现这种功能?其他一些 API 或工具包?
哦,这几乎可以肯定是一个非常糟糕的主意。
你听起来好像你真的想要一棵树或图,但不知道如何写它,所以你发明了这个符号来尝试让它与 HashMap 一起工作。
不。
通过弄清楚如何正确编写您需要的内容,您会变得更好。
没有图书馆可以做你想做的事,这是有充分理由的——你不应该这样做。
- 100 个函数在一个数据结构上运行比 10 个函数在 10 个数据结构上运行要好。艾伦·佩利斯。
你所问的是在 Clojure 的标准库中实现的:与前面所说的相反,嵌套哈希图是表示树的明显且绝对理智的方式。```clojure (def my-tree {:a {:aa 0} :b 0 :c {:cc 0 :dd {:e 0})
(= (get-in my-tree [:c :dd :e]) 0) ```
您也可以通过非对象图来表示它,但是您将失去 hashmaps 的一般性:对象无论如何都是概念性的 hashmaps,但对它可以拥有的属性有限制。
您当然可以使用类型定义哈希映射并HashMap<String, ?>
以类型安全为代价获得动态深度。
但是 duffymo 是正确的——你可能误用了这个结构。为什么要这样的类型?
你可能想看看这篇关于树的文章。您可能会发现它很有帮助。