2012-03-23 19 views
0

RELOADシステム(http://rpg.hamsterrepublic.com/ohrrpgce/RELOAD)は、ツリーベースのデータ格納システムとしてOHRRPGCE GCSで使用されます。このシステムのノードは、7つのタイプと任意の数の子のうちの1つを持つことができます。Javaでマルチタイプツリーシステムを処理するにはどうすればよいですか?

現在、私はジェネリックス経由でRELOADを処理するためのJava用のライブラリを作成していますが、それは私には嫌な感じです。私はそれを正しくやっていますか、より効率的な方法がありますか?私はあなたがここで達成しようとしているかわからない

/** 
* 
*/ 
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

親のタイプが子エレメントのタイプを制限しない場合、私はジェネリックスから得られるものは表示されません。あなたのAPIをより良く判断するために、そのAPIがどのように使用されるのかを確認する必要があります。 – Joni

+0

既存の実装(おそらく仕様に基づくJava以外のもの)への参照がありますか?また、Java変数については、実際にはdouble、int、Stringの3種類です。データが "String tag" - "data"形式であるため、ソートのハッシュマップを調べることができます。これはjsonと非常によく似ていますが、コンパクトで複雑なものです。 – Thomas

答えて

1

:ここ

は抽象RELOADノードのためのコードです。

ただし、基本的なツリー構造を再実装しているようです。実装すること、構造を効率的にすることは難しく、おそらくいくつかのサブディビジョンを欠場するでしょう。

優れた学力を発揮する演習ではありますが、プロダクションコード用に独自の構造を作成するようアドバイスしていません。

あなたが探しているのは、レッドブラックツリーです。あなたはどちらがより複雑なツリー構造を必要とする場合は、パッケージに

java.util.TreeMapの

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

avaibleです。 Googleは、Guava(無料でダウンロードして使用する)という非常に効率的な構造のパッケージを作成しました。ここで

あなたがthoses構造の

com.google.common.collect.TreeBasedTable

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

すべてがすでに一般的なものを見たいかもしれません。