【问题标题】:(Data Structure) Java LinkedList objects to Tree(数据结构)Java LinkedList 对象到树
【发布时间】:2013-02-27 07:37:48
【问题描述】:

我有一个像这样的 A 类:

class A {
    Long id;
    String name;
    Long parentId; // refers to another A object's id
}  

现在我得到 A 对象的列表,我想将它们全部放入 PC 中的“文件夹树”之类的数据结构中,然后使用 JSP 在 GUI 上查看该树,但我不知道如何实现.那么请您帮忙解决这两个问题:
1. 如何从给定的对象列表中构建“文件夹树”?有没有可用的 API 支持这个?
2. 我们如何在不使用递归的情况下浏览整个数据树并将其作为文件夹树在 JSP 上查看? (我的意思是显示它们的最佳方式是什么)
非常感谢。

【问题讨论】:

  • 您有两个属性:Long idLong parentId 将每个节点与其父节点相关联。你有什么尝试解决这个问题?如果您没有任何想法,请拿一支铅笔和一张纸思考一些事情(因为这看起来像是一个家庭作业)。
  • 所以您的意思是A 的对象包含对其他A 对象的引用?
  • @NishantShreshth: 是的,它包含其父对象的 id,而不是父对象
  • @LuiggiMendoza:与这个问题相关的背后有很多东西,但我试图在上面的问题上简化它;现在我一直在寻找什么样的数据结构来保存我的数据以及在 GUI 上显示它的方式(使用 JSP)
  • 如果这是您真正的问题,那么您可以(根据您的设计)将List<A> childrenNodes 作为A 类的属性。如果无法进行此修改,请创建一个包含A node; List<A> childrenNodes 的包装类。

标签: java jsp recursion tree linked-list


【解决方案1】:

根据您的 cmets,我假设您可以将 A 类更改为如下所示:

class A {
    Long id;
    String name;
    Long parentId; // refers to another A object's id
    List<A> childrenNodes = new ArrayList();
}

现在,假设您有一个填充了所有数据的List&lt;A&gt; lstData,并且您想将其转换为树,您可以使用以下代码/算法:

public List<A> convertIntoTree(List<A> lstData) {
    for(A parentA : lstData) {
        //setting the children nodes for parentA
        for(A childA : lstData) {
            if (childA.getParentId() == parentA.getId()) {
                parentA.getChildrenNodes().add(childA);
            }
        }
    }
    //the main tree
    List<A> lstParents = new ArrayList<A>();
    //filling the tree
    for(A parentA : lstData) {
        //change this for your check if parent function or another rule
        if (parentA.getParentId() == 0) {
            lstParents.add(parentA);
        }
    }
    return lstParents;
}

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    相关资源
    最近更新 更多