2015-07-19 7 views
7

यदि हमारे पास छात्र और पाठ्यक्रम इकाई है और उनके बीच का रिश्ता कई लोगों के लिए है, तो छात्र कई पाठ्यक्रम ले सकते हैं और कई छात्रों द्वारा एक कोर्स लिया जा सकता है। अगर हमें इस संबंध का प्रतिनिधित्व करना है तो सर्वोत्तम डेटा संरचना क्या है जिसके माध्यम से हम इस संबंध का प्रतिनिधित्व कर सकते हैं। यदि हम छात्र के साथ हैशप का उपयोग करते हैं, तो छात्रों ने मूल्य के रूप में ली गई पाठ्यक्रमों की कुंजी और सूची के रूप में हमें एक और हैशप की आवश्यकता है जिसके माध्यम से हम छात्र संबंधों के लिए पाठ्यक्रम का प्रतिनिधित्व कर सकते हैं। क्या इस संबंध का प्रतिनिधित्व करने के लिए कोई बेहतरीन तरीका है ताकि खोज तेजी से हो।कई रिश्तों को कई प्रतिनिधित्व करने के लिए डेटा संरचना

+1

संभव डुप्लिकेट [जावा कई संघ नक्शा बनाने के लिए कई] (http://stackoverflow.com/questions/2571652/ जावा-कई-से-कई-एसोसिएशन-मानचित्र), [कई रिश्ते में कई लोगों में मॉडल संरचना] (http://stackoverflow.com/questions/14219954/model- संरचना-in-many-to-many-relationship) – rid

+0

http://stackoverflow.com/questions/473862/is-there-a-many-to-many-collection-in-java-using-generics-domain-model-not-per – assylias

+0

वृक्ष आपको यहां क्या चाहिए –

उत्तर

1

एक द्वि-दिशात्मक ग्राफ लागू करता है करने के लिए इस्तेमाल किया जा सकता कई-से-अनेक संबंध जहां प्रत्येक नोड कई अन्य नोड्स

0

मुझे लगता है कि यह डेटा संरचनाओं के संयोजन का उपयोग करने के लिए उपयुक्त है से जोड़ा जा सकता।

public class ManyToManyMap<S, C> { 
    private Map<S, Set<C>> firstToSecondMap = new HashMap<>(); 

    private Map<C, Set<S>> secondToFirstMap = new HashMap<>(); 

    public void put(S first, C second) { 
     if (!firstToSecondMap.containsKey(first)) { 
      firstToSecondMap.put(first, new HashSet<>()); 
     } 
     firstToSecondMap.get(first).add(second); 

     if (!secondToFirstMap.containsKey(second)) { 
      secondToFirstMap.put(second, new HashSet<>()); 
     } 
     secondToFirstMap.get(second).add(first); 
    } 

    public Set<C> getFirst(S first) { 
     return firstToSecondMap.get(first); 
    } 

    public Set<S> getSecond(C second) { 
     return secondToFirstMap.get(second); 
    } 

    public Set<C> removeByFirst(S first) { 
     Set<C> itemsToRemove = firstToSecondMap.remove(first); 
     for (C item : itemsToRemove) { 
      secondToFirstMap.get(item).remove(first); 
     } 

     return itemsToRemove; 
    } 

    public Set<S> removeBySecond(C second) { 
     Set<S> itemsToRemove = secondToFirstMap.remove(second); 
     for (S item : itemsToRemove) { 
      firstToSecondMap.get(item).remove(second); 
     } 

     return itemsToRemove; 
    } 
} 

यहाँ और एक उदाहरण के उपयोग है: यहाँ एक छोटा सा उदाहरण है

ManyToManyMap<String, String> mmMap = new ManyToManyMap<>(); 

mmMap.put("Tom", "Math"); 
mmMap.put("Tom", "Java"); 
mmMap.put("Tom", "Java"); 
mmMap.put("Mary", "Java"); 

Set<String> coursesByStudent = mmMap.getFirst("Tom"); // Java, Math 
Set<String> studentByCourse = mmMap.getSecond("Java"); // Tom, Mary 

mmMap.removeByFirst("Tom"); 
studentByCourse = mmMap.getSecond("Java"); // Mary 
की
संबंधित मुद्दे