如何在Java中处理多类型树系统?

时间:2012-03-23 20:13:41

标签: java tree

RELOAD系统(http://rpg.hamsterrepublic.com/ohrrpgce/RELOAD)在OHRRPGCE GCS中用作基于树的数据遏制系统。此系统中的节点可以具有七种类型和任意数量的子节点之一。

目前,我正在编写一个Java库来通过泛型来处理RELOAD,但这对我来说感觉像是一块垃圾。我做得对吗还是有更有效的方法吗?

以下是抽象RELOAD节点的代码:

 /**
 * 
 */
package hamsterwrench.data.reload;

import java.util.ArrayList;

/**
 * @author Matt
 *
 */
public abstract class ReloadNode<T>{
    @SuppressWarnings("rawtypes")
    private ArrayList<ReloadNode> children = new ArrayList<ReloadNode>();
    private T data;
    private long nodeID;
    private String name;
    protected ReloadNodeType type;

    public ReloadNode(long id, String newName){
        name = newName;
        nodeID = id;
    }

    public T readData(){
        return data;
    }

    public void writeData(T input){
        data = input;
    }

    public String name(){
        return name;
    }

    public ReloadNodeType type(){
        return type;
    }

    @SuppressWarnings("rawtypes")
    public void addChild(ReloadNode r){
        children.add(r);
    }

    public int numberOfChildren(){
        return children.size();
    }

    public boolean removeChild(@SuppressWarnings("rawtypes") ReloadNode r){
        return children.remove(r);
    }

    @SuppressWarnings("rawtypes")
    public ReloadNode getChild(int i){
        return children.get(i);
    }

    public ArrayList<String> getChildrenNames(){
        ArrayList<String> result = new ArrayList<String>();
        for(int i = 0; i < children.size(); i++){
            result.add(children.get(i).name());
        }
        return result;
    }

    public long ID(){
        return nodeID;
    }
}

1 个答案:

答案 0 :(得分:1)

我不确定你在这里想要达到的目标。

但是,您似乎正在重新实现基本树结构。有效地实施,构建是一项艰巨的任务,你可能会遗漏一些细微差别。

虽然这是一个很好的学习练习,但我并没有建议你为生产代码编写自己的结构。

你可能正在寻找的是红黑树。哪个可以在包中找到

java.util.TreeMap中

http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html

如果您需要更复杂的树结构。谷歌已经创建了一个名为Guava的高效结构包(可免费下载和使用)。

在这里你可能想看看

com.google.common.collect.TreeBasedTable

http://docs.guava-libraries.googlecode.com/git-history/v11.0.2/javadoc/com/google/common/collect/TreeBasedTable.html

所有这些结构都是通用的。