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;
}
}
答案 0 :(得分:1)
我不确定你在这里想要达到的目标。
但是,您似乎正在重新实现基本树结构。有效地实施,构建是一项艰巨的任务,你可能会遗漏一些细微差别。
虽然这是一个很好的学习练习,但我并没有建议你为生产代码编写自己的结构。
你可能正在寻找的是红黑树。哪个可以在包中找到
java.util.TreeMap中
http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html
如果您需要更复杂的树结构。谷歌已经创建了一个名为Guava的高效结构包(可免费下载和使用)。
在这里你可能想看看
com.google.common.collect.TreeBasedTable
所有这些结构都是通用的。