java中分层数据表示的最佳数据结构是什么?

我需要在java中创建一个可以表示数据层次结构的数据结构。示例用例如下图所示。

组织层次结构

在我的例子中,只有叶子级别才会有数据,内部节点应该像索引一样工作。我应该能够使用多个键(复合键)从数据结构中获取数据。

是否可以使用嵌套映射,或者我应该为此用例实现一个 m 路树(B 树/B+ 树)。


一只甜甜圈
浏览 98回答 3
3回答

慕尼黑5688855

如果嵌套数据的结构是不变的,您可以使用带有属性的普通类。如果结构是动态的,我会使用Maps,接口并忽略实现。关于使用自定义树结构,如果可以使用类,那就更好了。如果您使用Maps,我会从 a 开始,HashMap如果您发现这是一个问题,您可以Map稍后将其替换为其他内容。

ibeautiful

您可以为此用例实现 Trie。迭代复合键并返回数据(如果找到)。类定义:public class TrieNode {&nbsp; &nbsp; private HashMap<String, TrieNode> children;&nbsp; &nbsp; private Data data;&nbsp; &nbsp; private boolean isLeaf;&nbsp; &nbsp;// ...}查找查询将如下所示:public Data find(List<String> compositeKey) {&nbsp; &nbsp; TrieNode current = root;&nbsp; &nbsp; for (String key: compositeKey) {&nbsp; &nbsp; &nbsp; &nbsp; TrieNode node = current.getChildren().get(key);&nbsp; &nbsp; &nbsp; &nbsp; if (node == null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; current = node;&nbsp; &nbsp; }&nbsp; &nbsp; if(current.isLeaf()) {&nbsp; &nbsp; &nbsp; &nbsp;return current.getData();&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp;return null;&nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}插入将如下所示:public void insert(List<String> compositeKey, Data data) {&nbsp; &nbsp; TrieNode current = root;&nbsp; &nbsp; for (String key: compositeKey) {&nbsp; &nbsp; &nbsp; &nbsp; current = current.getChildren()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .computeIfAbsent(key, c -> new TrieNode());&nbsp; &nbsp; }&nbsp; &nbsp; current.setLeaf(true);&nbsp; &nbsp; current.setData(data);}

慕码人8056858

显然你必须使用类似树的数据结构。这是它的示例代码。高级代码思想class Entity{&nbsp;&nbsp;&nbsp; &nbsp; // declare you attributes and below two properties&nbsp; &nbsp; List<Entity> children;&nbsp; &nbsp; boolean isleafNode;// for parent node its 'false' and for leaf node it will 'true'&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java