नहीं समझ सकता मुझे अपने हैश मैप्स की एक अलग प्रति प्राप्त करने में परेशानी हो रही है। इसका मतलब है, एक बार जब मैंने मूल की एक प्रति बना ली है, तो एक में बदलाव करने से दूसरे को नहीं बदला जाता है।हैश मैप प्रतिलिपि व्यवहार मैं
HashMap<String, List<String> one = new HashMap<String, List<String>();
HashMap<String, List<String> two = new HashMap<String, List<String>();
मैं नीचे निम्नलिखित समारोह (getTabSetDifferences) एक और दो में गुजर, जैसे कि अपेक्षित वहाँ कुछ मतभेद हैं, उन मूल्यों HashMap से निकाल दिया जाएगा कॉल:
मैं इस प्रारूप में दो HashMaps है और यह परीक्षण के लिए पारित होने से पहले अलग होगा।
मैं उन्हें अपरिवर्तित ही रहेंगे चाहते हैं, इसलिए में passsing की कोशिश की:
getTabSetDifferences((HashMap)one.clone(), (HashMap)two.clone())
यह अभी भी मूल बदल गया है, तो मैं एक ही प्रारूप में दो और HashMaps बनाया है, और एक और दो उन्हें क्लोन, मैं प्रयोग किया जाता है नए हैशैप्स पास करने के लिए, और मूल अभी भी बदल गया था।
मैं तो कोशिश की:
HashMap<String, List<String>> holdOne = new HashMap<String, List<String>>();
holdOne.putAll(one);
HashMap<String, List<String>> Holdtwo = new HashMap<String, List<String>>();
holdTwo.putAll(two);
अब मैं कुछ ऐसा कर सकते हैं: नहीं बदला गया है
holdTwo.remove(key);
और मूल है, लेकिन अगर मैं holdOne साथ विधि और holdTwo फोन यह अभी भी बदल जाता है मूल एक और दो हैशपैप्स, क्या वे नहीं रहना चाहिए? विधि काम कर रही है, और अंतर जो मैं चाहता हूं, ढूंढ रहा हूं, और वापस आ गया है। लेकिन मुझे अभी भी मूल दो हैशैप्स की आवश्यकता है, लेकिन इससे कोई फर्क नहीं पड़ता कि जिस तरह से मैं कॉल करता हूं, पकड़ने के लिए कभी भी बदलाव किए जाते हैं और पकड़ते हैं दो मूल को बदलते हैं। क्या यह अपेक्षित व्यवहार है? यदि हां, तो का उचित तरीका क्या है जो हैशपैप की एक प्रति प्राप्त करने के लिए है जो उससे बंधे नहीं है।
getTabSetDifferences(holdOne, holdTwo);
public HashMap<String, List<String>> getTabSetDifferences(HashMap<String, List<String>> hmMain, HashMap<String, List<String>> hmSecond) {
HashMap<String, List<String>> hmDifferences = new HashMap<String, List<String>>();
for (Map.Entry<String, List<String>> entry : hmMain.entrySet()) {
if(hmSecond.containsKey(entry.getKey())) {
entry.getValue().removeAll(hmSecond.get(entry.getKey()));
if (entry.getValue().size() > 0)
hmDifferences.put(entry.getKey(), entry.getValue());
}
else {
hmDifferences.put(entry.getKey(), entry.getValue());
}
}
return hmDifferences;
}
आपकी व्याख्या अपेक्षाकृत अस्पष्ट है। मुझे समझ में नहीं आता कि आप क्या करने की कोशिश कर रहे हैं और यह – Bozho
में विफल कैसे होता है यह वास्तव में असफल नहीं होता है। मैं अपने दो मूल हैश मैप्स को बरकरार रखना चाहता हूं। विधि getBabSetDifferences हैश मैप्स में से किसी एक के अंतर को हटा देता है। मैं एक प्रतिलिपि में गुजरना चाहता हूं, इसलिए मूल अपरिवर्तित है, लेकिन मैं यह नहीं समझ सकता कि एक प्रतिलिपि कैसे बनाई जाए, जो मूल से जुड़ी नहीं है। – Green