我需要一个树形结构,按层次结构对所有添加的类进行排序。我必须得到所有继承某个类的类。一个特定的读取访问需要非常快。
示例:
我添加以下类。
public static class Event
{
}
public static class PlayerEvent extends Event
{
}
public static class PlayerMoveEvent extends PlayerEvent
{
}
public static class WorldEvent extends Event
{
}
它应该对这样的类进行排序:
答案 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。每次添加子类时,都会在子类列表中附加一行。