【问题标题】:Tree that sorts classes hierarchicly对类进行分层排序的树
【发布时间】:2014-04-25 23:03:55
【问题描述】:

我需要一个树结构来对所有添加的类进行分层排序。我必须得到所有继承一个特定类的类。一个特定的读取访问需要非常快。

例子:

我添加了以下类。

public static class Event
{

}

public static class PlayerEvent extends Event
{

}

public static class PlayerMoveEvent extends PlayerEvent
{

}

public static class WorldEvent extends Event
{

}

它应该像这样对类进行排序:

http://i.imgur.com/J6DyZvL.png

【问题讨论】:

  • 只有子类有关于它的超类的信息。反向是不可能的。
  • 看来您需要抓取 Java API 和目录中的代码文件才能找到此信息。
  • 你没有理解我的问题。我有一个各种类的列表,我需要得到所有继承一个特定类的东西。我认为一棵树可以完美解决这个问题。
  • 你能举个例子说明这棵树应该如何表现吗?
  • @ggovan 我编辑了这个问题。

标签: java class data-structures tree hierarchy


【解决方案1】:

使用Map <Class, List <Class>>,其中键是父类,List 包含所有子类。

【讨论】:

  • 这似乎非常占用内存。并且添加类可能会很慢。
【解决方案2】:

拥有一个代表树中节点的 Node 类。 它存储它所代表的类及其直接子级。

class Node {
    Set<Node> children;
    Class class;
}

然后你可以构建树,并得到你的根节点。

List<Class> classList = ...l
Map<Class,Node> classMap = ... a map from all your classes to nodes made from them;
Node rootNode = null;

for(Class c : classList){
    Node parentNode = classMap.get(c.getSuperclass());
    if(parentNode != null)
        parentNode.children.add(classMap.get(c));
    else
        rootNode = classMap.get(c);
}

【讨论】:

  • 是的,这正是我所需要的,但我认为每次检查每节课都太慢了。
【解决方案3】:

Andres 的答案最适合 O(1) 查找。 如果您使用分层数据结构,您总是必须进行迭代。如果要存储分层数据结构以便可以进行 O(1) 检索,则需要有内存来对其进行快照。 Java 存储引用,因此它不会像您想的那样多,但它仍然不会微不足道。如果您想节省内存,您可以通过将子类的值写入文件来使用磁盘空间。每次添加子类时,都会在子类列表中追加一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2020-09-13
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多