Java Collections HashMap, value changes unexpectedly -
सार्वजनिक वर्ग की सूचीमैप {हैशमैप & lt; पूर्णांक, सूची & gt; Mp = नया हैशमैप (); सूची myList = नया अर्रेलिस्ट (); पूर्णांक x = 0; पूर्णांक y = 5; शून्य परीक्षण () (के लिए (पूर्णांक I = 0; i & lt; 5; i ++) {x = y; MyList.add ("चेक -1 ए" + i); MyList.add ("चेक -1 ए" + I + 1); वाई = नल; Println (x); // आउटपुट = 5 mp.put (i, myList); myList.clear (); }} 1) लेकिन myList.clear () के साथ सूची को समाशोधन करने के बाद मानचित्र के भीतर के मान भी साफ़ हो जाते हैं।
मेरा मतलब है कि नक्शा कुंजी वहाँ बनी हुई है लेकिन इसमें "खाली" सूची है
2) हालांकि ऑब्जेक्ट्स x & amp; y , y से null को सेट करने के बाद x कैसे बदलता नहीं है?
जब आप किसी ऑब्जेक्ट को किसी मैप (या कोई अन्य संग्रह) में जोड़ते हैं, तो आप संदर्भ उस ऑब्जेक्ट के लिए, एक कॉपी नहीं जब आप ऑब्जेक्ट में परिवर्तन करते हैं, तो ये परिवर्तन भी नक्शे में संदर्भ को प्रभावित करेंगे।
जब आप अपनी सूची में से एक कॉपी को संग्रहित करना चाहते हैं, तो आपको नया एक इसे इस तरह किया जा सकता है:
mp.put (i, नया अर्रेलिस्ट (myList)); एक वैकल्पिक (और मेरी राय में भी बेहतर) समाधान प्रत्येक लिप आवृत्ति की शुरुआत में एक ताजा सूची वस्तु के लिए सेट करके myList को दोबारा शुरू करना होगा:
myList = नया अर्रे लिस्ट (); myList.add ( "जाँच-1a" + i); myList.add ( "जाँच-1a" + i + 1); mp.put (i, MyList); ध्यान दें कि सूची को नष्ट नहीं किया जाता है जब आप चर myList को पुनः आरंभ कर सकते हैं। आप मानचित्र के अंदर रहने वाले ऑब्जेक्ट के बारे में सोच सकते हैं। *
* हालांकि अधिक तकनीकी रूप से सटीक विवरण होगा "ऑब्जेक्ट मेमोरी में रहता है और कचरा-संग्रह नहीं होता अभी भी इसका एक संदर्भ मानचित्र में संग्रहीत है "
Comments
Post a Comment