2009-08-07 53 views
1

我有一個有向圖,用於包含循環的Java中所有可用的地址格式。除了上面的模板之外,我還想存儲作爲此圖形範圍的用戶地址。我的圖是從下面的XML獲得:如何創建生成樹

<address> 
    <city start="true"> 
     <minicity /> 
     <street /> 
     <square /> 
    </city> 
    <minicity> 
     <street /> 
     <alley /> 
     <square /> 
    </minicity> 
    <street> 
     <street /> 
     <alley /> 
     <blibd /> 
    </street> 
    <square> 
     <street /> 
     <alley /> 
     <blibd /> 
    </square> 
    <alley final="true"> 
     <alley /> 
     <blibd /> 
     <plaque /> 
    </alley> 
    <blibd final="true"> 
     <alley /> 
     <blibd /> 
     <plaque /> 
    </blibd> 
    <plaque final="true"> 
     <stage /> 
     <unit /> 
    </plaque> 
    <stage final="true"> 
     <unit /> 
    </stage> 
    <unit final="true"> 
    </unit> 
</address> 

正如你可以看到圖的大街節點具有高於本身就是一個週期。用戶地址的樣本應該是這樣的:

城市:街道:乙街道:C街道:d衚衕:F

我的問題是: 什麼是存儲的最佳方式用戶的地址圖?我有上面的模板圖,並想知道將用戶圖保存在此模板中還是外部使用不同的結構會更好。

回答

1

adjacency matrix是表示圖形的標準方式。在你的情況下,矩陣的每個元素都可以用節點類別(城市等)來補充。

用戶的地址可以通過存儲對給定地址的最內層節點的單獨引用並向外追溯到城市級別來構建地址來獲得。

雖然我個人可能會選擇比通用圖更加結構化的方法,創建諸如城市,街道等業務對象,從而強制實施地址結構;例如

public interface Residence { 
    int getNumber(); 
    Street getStreet(); 
} 

public interface Street { 
    City getCity(); 
} 

public interface City { 
    Country getAddress(); 
} 

要顯示給定居住地址,我只需走對象圖;例如

Residence r = ... 
System.err.println(String.format("%d %s %s %s", r.getNumber(), r.getStreet(), r.getStreet().getCity(), r.getStreet().getCity().getCountry())); 
+0

我圖的每個節點都是一個類,它有一些用於設置它的子節點的函數 – JGC 2009-08-07 14:38:41

+0

您是否必須以這種通用的方式對它進行建模?爲什麼不把它轉化爲更有意義的業務對象來強制某種結構? – Adamski 2009-08-07 14:39:57

+0

因爲我不想讓用戶輸入每種地址組合,並且因爲我想製作可重用的代碼,所以我製作了AddressNode類,並使用地址節點類製作樹結構 – JGC 2009-08-07 16:35:34