java - 如何制作具有多种类型节点的树并且每个节点可以在java中有多个子节点

标签 java data-structures tree

基本上我正在尝试实现这样的东西,其中伙伴节点是“type1”,客户端节点是“type2”,用户节点是“type3”。并且每个节点都可以有多个子节点。因此 Partner1 下可以有任意数量的客户端节点,类似地,客户端节点下可以有任意数量的用户。

enter image description here

我已经开始实现了,但我现在卡住了。我写的代码如下。

public class ClientProperty {
    public class Root{}         //NodeType1

    public class Partner{       //NodeType2
        public String partner_id;
        public String partner_name;
        public int partner_node_id;

        public Partner(String partner_id,String partner_name,int partner_node_id){
            this.partner_id = partner_id;
            this.partner_name = partner_name;
            this.partner_node_id = partner_node_id;
        }
    }

    public class Clients{       //NodeType3
        public String client_name;
        public String client_id;
        public int client_node_id;
        public Map<Enum,List<Enum>> clientproperty = new HashMap<Enum,List<Enum>>();

        public Clients(String client_name, String client_id, int client_node_id,Map<Enum,List<Enum>> clientproperty){
            this.client_name = client_name;
            this.client_id = client_id;
            this.client_node_id = client_node_id;
            this.clientproperty = clientproperty;
        }
    }
    public class Users{         //NodeType4
        public String user_name;
        public String user_id;
        public int user_node_id;

        public Users(String user_id,String user_name, int user_node_id){
            this.user_id = user_id;
            this.user_name = user_name;
            this.user_node_id = user_node_id;
        }
    }
    public class Node{
        Node next;
        Object nodes;

        public Node(){
            next = null;
        }

        public Node(Object nodes, Node next){
            this.nodes = nodes;
            this.next = next;
        }
    }
}

如果需要一些见解,请告诉我

最佳答案

首先是一些更不具体的事情:

您想阅读有关数据封装的内容。将所有 public 字段都放在你的类中是完全错误的。你实际上想尽可能地隐藏这些信息。

然后您想阅读java 编码风格约定;因为您违反了其中的很多(当您向更有经验的 Java 编码人员展示您的代码时,这根本无济于事)。

最后,最重要的是:您想阅读很多关于OO 设计 的一般知识(我推荐 Robert Martin 的“敏捷实践”;有一个免费的 PDF 版本的“C# 版本”那本书):

首先是

a) 成为客户/用户是“不同的责任”

b) 是图中的某个元素

换句话说:您在类(class)中放置了太多“角色”。

意思:你想引入各种抽象。例如:

interface GraphNode<N, C extends GraphNode> {
    N getNodeContent();
    List<C> getChildrenNodes();
}

现在你可以表达:任何“节点”确实有一些内容(可以是用户或客户端或任何对象);它有一个子列表(或集合),它们也是“节点”。

关于java - 如何制作具有多种类型节点的树并且每个节点可以在java中有多个子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37741967/

相关文章:

java - Linux Gurobi LD_LIBRARY_PATH不满意的链接错误AWS

python - 用于在磁盘上有效存储整数对集的数据结构选项?

javascript - 根据数组元素的总和对数组中的元素进行排序

C++指针树模板问题

JavaFX:ComboBox<Test>根据Test的ID字段获取和设置项目

java - 系统输出,系统错误 : often temporary debugging statements warning

java - Mac 切换 JDK 版本失败

java - 在java中获取子矩阵的引用

c++ - 糟糕的树添加性能

c++ - 使用最小生成树查找从 A 到 B 的路径 - C/C++