2010-07-29 18 views
5

मैं सोच रहा था क्या सबसे अच्छा डेटा संरचना (रों) इस परिदृश्य के लिए उपयोग करने के लिए होगा:जावा डेटा संरचना सवाल

2 वस्तु टाइप ए और बी

एक बी के कई उदाहरणों हो सकती है

एनाम अद्वितीय है। बी नाम ए के उदाहरण (हालांकि वैश्विक स्तर पर अद्वितीय नहीं है)

मैं getA (स्ट्रिंग एनाम) जैसे एक्सेसर विधियों को प्रदान करने में सक्षम होना चाहता हूं; getB (स्ट्रिंग एनाम, बीएनएएम) बी देता है;

सभी मदद की बहुत सराहना की है,

क्रिस

उत्तर

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

आपके सभी उत्तरों के लिए धन्यवाद दोस्तों - यह वास्तव में सहायक रहा है !! यहां स्टैक ओवरफ्लो नियम पर लोग :) – QuakerOat

0

तो एक एक आंतरिक नक्शा इतना की तरह बनाए रखा:

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

और तुम बी के उदाहरण सम्मिलित करें और के उदाहरण प्राप्त करने के लिए एक सदस्य के कार्यों के लिए किया था बी और ऐसा:

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

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

फिर आप सुनिश्चित कर सकते हैं कि मानचित्र होगा अद्वितीय बी नाम के साथ कुंजी शामिल हैं।

आप एक नक्शा है कि अद्वितीय एक नामों से keyed है बनाए रखने के लिए यह एक ही तर्क का विस्तार कर सकते हैं:

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


} 
संबंधित मुद्दे