【问题标题】:How to store hierarchical structure data in java? [closed]如何在java中存储层次结构数据? [关闭]
【发布时间】:2013-10-24 08:59:12
【问题描述】:

在数据库表中,我维护了父子文件夹关系,如下图datatable。使用这种关系,我需要在 jsp 网页中创建层次结构。为了显示该结构,我使用了http://myfaces.apache.org/tomahawk t:tree2 组件。我的要求是,我需要从数据库中获取数据并将该关系存储在 java 变量中。为此,我需要一种递归技术来将树结构或(分层结构)存储在 java 变量中。请帮忙寻找答案。

数据表:

目录结构的分层视图:

谢谢

【问题讨论】:

标签: java sql loops recursion iterator


【解决方案1】:

创建一个包含子节点列表和其他所需状态变量(如 isdirectory 等)的 Node 类。请求您使用“Java 中的树状数据结构”再次搜索 SO。我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以使用递归对其进行迭代。

    void processChilds(Item child) {
    List<Item> childs = selectChilds(child);
        for(Item i: childs) {
           //do smth
           processChilds(i);
        }
    }
    

    或者您需要一次选择所有记录,然后将其解析为您自己的对象结构。它可以是 HashMap 或你自己的树状结构。

    class Item {
      List<Item> childs;
    }
    

    我建议你使用第一个(因为它很容易编码)除非你的树真的很深

    【讨论】:

    • selectChilds(child) 方法在这种情况下做了什么?!!
    • 数据库调用,例如“从 column1 = 的表中选择 colum2?”和 ?是当前文件夹的名称。但您需要将 ROOT 文件夹添加到您的数据库中
    • k, processChilds(Item child) 也有列表类型参数。我正在使用不支持泛型和 for 循环(使用已用)的 java 1.4。我想我需要将单个文件夹名称传递给 processChilds() 方法,以便我可以从 selectChilds(child) 方法中获取它的子级。对不起,如果我打扰你。谢谢
    • 我建议使用 java 7,因为即使 java 6 已经到了生命的尽头。您需要自己编写“selectChilds”。所以参数由你决定。你可以写 'List childs' 而不是 'List childs'
    • 我使用递归方法(你建议的方法)来完成必要的任务。谢谢:)
    【解决方案3】:

    在 Java 中创建树结构几乎与在任何其他语言中相同。你应该阅读Data Structures and Algorithms

    根据您将如何使用它,您的数据结构会有所不同。一个很容易向上遍历的非常好的方法是这样的:

    class Node
    {
       private Node parent;
       private int value;
    }
    

    加上对叶子(或节点,如果您希望整个树可搜索)的哈希查找,您就有了一种完美的方法来查找任何文件的路径以及使用这种结构的路径。如果您有一个节点并且想要找到它的子节点,则不能使用此结构。然后可以使用已经显示为答案之一的更传统的树。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 2019-04-08
      • 2011-11-27
      • 2021-04-26
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多