对层次分类的树

时间:2014-04-25 23:03:55

标签: java class data-structures tree hierarchy

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

示例:

我添加以下类。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

拥有一个表示树中节点的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);
}

答案 2 :(得分:0)

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