2012-03-23 41 views
0

RELOAD系統(http://rpg.hamsterrepublic.com/ohrrpgce/RELOAD)在OHRRPGCE GCS中用作基於樹的數據遏制系統。該系統中的節點可以具有七種類型和任意數量的子節點中的一種。如何在Java中處理多類樹型系統?

目前,我正在爲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

如果家長的類型不限制子元素的類型,我不會看到你能從泛型中獲得什麼。不過,我們必須瞭解如何使用API​​來更好地判斷它。 – Joni 2012-03-23 20:26:05

+0

你有任何機會參考現有的實現(非Java可能基於規範)?另外,就Java變量而言,列出的8種類型實際上是3:double,int,String。因爲數據是「字符串標記」 - 「數據」格式,所以您可能希望查看各種散列圖。它與json非常相似,但解析出來更加緊湊和複雜。 – Thomas 2012-03-23 20:38:36

回答

1

我不知道你正試圖在這裏實現什麼。

但是,看起來您正在重新實現基本的樹結構。實施有效的結構非常困難,你可能會錯過一些缺陷。

雖然這是一個很好的accademical exercice,但我並不建議你編寫自己的生產代碼結構。

你可能看到的是紅黑樹。在包中,如果你需要更復雜的樹結構這是avaible

java.util.TreeMap中

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

。 Google創建了一個稱爲Guava的高效結構包(可免費下載和使用)。

在這裏,你可能想看看

com.google.common.collect.TreeBasedTable

http://docs.guava-libraries.googlecode.com/git-history/v11.0.2/javadoc/com/google/common/collect/TreeBasedTable.html放入系統結構的

所有已經通用的。

相關問題