java 中的简单异构 k 叉树(用于创建网络模拟器)
simple heterogeneous k-ary tree in java (for creating network simulator)
我正在做一个创建网络模拟器的项目。我正在模拟的网络是分层网络。我正在使用 k-ary 树数据结构,使用一些额外的方法来模拟和执行一些网络分析。
到目前为止,我有一个接受通用类型的通用 k 元树数据结构,它工作正常。问题是树节点似乎只能是一种类型。例如,如果我用 String 类型声明树,则节点必须都是 String 对象。
但是,由于我正在尝试对计算机网络(或任何网络)进行建模,因此某些节点可能必须是服务器对象,而某些节点可能是主机对象,甚至是路由器对象等...
我希望我的异构树的节点有一些服务器对象和一些 mobileDevice 对象...
我在 Google 上没有找到太多答案,这似乎是在考验我的创造力。我确实知道一个名为 ANTL3R 之类的抽象语法树生成器,它据说可以利用异构树,但我的树是用于网络,而不是编译器。
解决这个问题的方法是定义树的所有节点都必须实现的interface
。然后你可以声明你的树来存储那种类型的数据。
public interface ComputerComponent {
String getName();
ComponetType getType();
...
}
Tree<ComputerComponent> network;
另一种选择(不推荐)是将其声明为 Tree<Object>
。然后你可以在其中存储任何东西,但你失去了所有类型检查功能,最终将不得不使用 instanceof
和转换来使用你检索的数据。
我正在做一个创建网络模拟器的项目。我正在模拟的网络是分层网络。我正在使用 k-ary 树数据结构,使用一些额外的方法来模拟和执行一些网络分析。
到目前为止,我有一个接受通用类型的通用 k 元树数据结构,它工作正常。问题是树节点似乎只能是一种类型。例如,如果我用 String 类型声明树,则节点必须都是 String 对象。
但是,由于我正在尝试对计算机网络(或任何网络)进行建模,因此某些节点可能必须是服务器对象,而某些节点可能是主机对象,甚至是路由器对象等...
我希望我的异构树的节点有一些服务器对象和一些 mobileDevice 对象...
我在 Google 上没有找到太多答案,这似乎是在考验我的创造力。我确实知道一个名为 ANTL3R 之类的抽象语法树生成器,它据说可以利用异构树,但我的树是用于网络,而不是编译器。
解决这个问题的方法是定义树的所有节点都必须实现的interface
。然后你可以声明你的树来存储那种类型的数据。
public interface ComputerComponent {
String getName();
ComponetType getType();
...
}
Tree<ComputerComponent> network;
另一种选择(不推荐)是将其声明为 Tree<Object>
。然后你可以在其中存储任何东西,但你失去了所有类型检查功能,最终将不得不使用 instanceof
和转换来使用你检索的数据。