2010-07-29 88 views
5

我想知道什麼是最好的數據結構(一個或多個),以用於以下情形:Java數據結構問題

我有2分物體A型和B

A可能含有B的許多實例

A.name是唯一的。 B.name在它的實例A中是唯一的(儘管不是全局唯一的)

我想能夠提供訪問方法,如 getA(String aName)返回一個; getB(String aName,bName)返回b;

所有幫助是非常讚賞,

克里斯

回答

1
public class DataStructure{ 
     private Map<String, A> aMap = new HashMap<String, A>(); 
     public getA(String name){ 
      return aMap.get(name); 
     } 
     public getB(String aName, String bName){ 
      A anA = getA(aName); 
      if(null != anA){ 
       return anA.getB(bName); 
      }else{ 
       return null; 
      } 
    } 
} 
public class A{ 
    String name; 
    Map<String, B> myBs = new HashMap<String, B>(); 
    public A(String name){ 
     this.name = name; 
    } 
    public void putB(B foo){ 
     myBs.put(foo.getName(), foo); 
    } 
    public B getB(String bName){ 
     return myBs.get(bName); 
    } 

} 


public class B{ 
    String name; 
    public B(String name){ 
     this.name=name; 
    } 
} 
+0

謝謝你們所有的回覆 - 這真的很有幫助! 這裏的人在stackoverflow規則:) – QuakerOat 2010-07-30 15:15:09

0

如果A維護的內部地圖,像這樣:

Map<String, B> bMap = new LinkedHashMap<String, B>(); 

而且你有一個成員函數插入B的實例和獲得的實例B和像這樣:

public void addB(B b) { 
    bMap.put(b.getName(), b); 
} 

public B getB(String name) { 
    return bMap.get(name); 
} 

然後你可以確定地圖會包含具有唯一B名稱的密鑰。

您可以擴展此相同的邏輯來維持由唯一一個名字鍵控地圖:

A a = new A("someAName"); 
a.addB(new B("someName")); 
a.addB(new B("someOtherName")); 

Map<String, A> aMap = new LinkedHashMap<String, A>(); 
aMap.put(a.getName(), a); 

你可以把aMap另一個類中和實施getB方法:

public B getB(String aName, String bName) { 
    return aMap.get(aName).getB(bName); 
} 
6

它聽起來像你需要這樣的東西(除了更好的名稱,初始化,錯誤處理等 - 這只是一個骨架):

public class AContainer 
{ 
    private Map<String, A> map; 

    public A getA(String name) 
    { 
     return map.get(name); 
    } 

    public B getB(String nameA, String nameB) 
    { 
     return getA(nameA).getB(nameB); 
    } 
} 

public class A 
{ 
    private Map<String, B> map; 

    public B getB(String name) 
    { 
     return map.get(name); 
    } 
} 
0
class a { 
    String name 
    List<B> bList 

    public getName() {....} 
    public getBByName(String name) { 
    .... 
    } 


}