2010-07-29 33 views
5
Ben en iyi veri yapısını (lar) Aşağıdaki senaryo için kullanmak ne olacağını merak

:Java veri yapısı soru

Ben

A'dan B'ye birçok örneklerini içerebilir 2 nesne türlerini A ve B var

A.name benzersizdir. B.name, A (global olarak benzersiz olmasa da) örneğinde benzersizdir

getA (String aName) gibi erişim yöntemleri sağlayabilmek için a; getB (String aName, bName) b;

Tüm Yardım çok takdir

,

Chris

cevap

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

Tüm yanıtlarınız için teşekkürler - bu gerçekten yardımcı oldu! Buradaki insanlar stackoverflow kuralında :) – QuakerOat

0

A dahili haritası şöyle devam edin:

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

Ve B'nin örneklerini eklemek ve örneklerini almak için üye işlevlerini vardı B ve benzeri:

Ardından haritanın benzersiz B isimleri olan anahtarlar içerir.

Sen eşsiz bir isimle kamalıdır bir harita korumak için bu aynı mantığı uzatabilirsiniz:

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); 

başka sınıf içinde aMap koyabilirsiniz ve getB yöntemi uygulamak:

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

It Bu gibi bir şeye ihtiyacınız olduğu gibi geliyor (daha iyi isimler, başlatma, hata işleme vb. hariç - bu sadece bir iskelettir):

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) { 
    .... 
    } 


}