मुझे पता है कि यह एक पुराना धागा है, लेकिन किसी भी अन्य उत्तर ने मेरे उपयोग के मामले को पूरी तरह से हल नहीं किया है (मुझे लगता है कि अमरूद मल्टीसेट ऐसा ही कर सकता है, लेकिन यहां कोई उदाहरण नहीं है)। कृपया मेरे प्रारूपण का बहाना करें। स्टैक एक्सचेंज पर पोस्ट करने के लिए मैं अभी भी नया हूं। इसके अतिरिक्त अगर कोई त्रुटि हो तो मुझे बताएं
कहते हैं कि तुम List<T>एक हैList<T> बी है और आप जांचना चाहते हैं कि क्या वे निम्नलिखित स्थितियों के बराबर हैं:
1) O (n) अपेक्षित रनिंग टाइम
2) समानता को इस रूप में परिभाषित किया गया है: सभी तत्वों के लिए a या b में, तत्व जितनी बार घटित होता है, वह उतना ही होता है, जितना तत्व b में होता है। तत्व समानता को T.equals () के रूप में परिभाषित किया गया है
private boolean listsAreEquivelent(List<? extends Object> a, List<? extends Object> b) {
if(a==null) {
if(b==null) {
//Here 2 null lists are equivelent. You may want to change this.
return true;
} else {
return false;
}
}
if(b==null) {
return false;
}
Map<Object, Integer> tempMap = new HashMap<>();
for(Object element : a) {
Integer currentCount = tempMap.get(element);
if(currentCount == null) {
tempMap.put(element, 1);
} else {
tempMap.put(element, currentCount+1);
}
}
for(Object element : b) {
Integer currentCount = tempMap.get(element);
if(currentCount == null) {
return false;
} else {
tempMap.put(element, currentCount-1);
}
}
for(Integer count : tempMap.values()) {
if(count != 0) {
return false;
}
}
return true;
}
रनिंग टाइम O (n) है क्योंकि हम O (2 * n) इन्सर्ट एक हैशमैप में कर रहे हैं और O (3 * n) हैशमैप सेलेक्ट करते हैं। मैंने इस कोड का पूरी तरह से परीक्षण नहीं किया है, इसलिए सावधान रहें :)
//Returns true:
listsAreEquivelent(Arrays.asList("A","A","B"),Arrays.asList("B","A","A"));
listsAreEquivelent(null,null);
//Returns false:
listsAreEquivelent(Arrays.asList("A","A","B"),Arrays.asList("B","A","B"));
listsAreEquivelent(Arrays.asList("A","A","B"),Arrays.asList("A","B"));
listsAreEquivelent(Arrays.asList("A","A","B"),null);