मैंने एक एकल-लिंक्ड सूची लिखने का फैसला किया, और आंतरिक लिंक्ड नोड संरचना को अपरिवर्तनीय बनाने के लिए योजना चल रही थी।
मैं हालांकि एक रोड़ा में भाग गया। कहो कि मेरे पास निम्नलिखित लिंक नोड्स हैं (पिछले addऑपरेशन से):
1 -> 2 -> 3 -> 4
और कहते हैं कि मैं एक append करना चाहते हैं 5।
ऐसा करने के लिए, चूंकि नोड 4अपरिवर्तनीय है, मुझे इसकी एक नई प्रति बनाने की आवश्यकता है 4, लेकिन इसके nextक्षेत्र को एक नए नोड के साथ बदलें 5। समस्या अब है, 3पुराने को संदर्भित कर रहा है 4; बिना एप्लाइड वाला 5। अब मुझे कॉपी का संदर्भ 3लेने की आवश्यकता है , और कॉपी nextको संदर्भित करने के लिए इसके क्षेत्र को बदलना 4है, लेकिन अब 2पुराने को संदर्भित कर रहा है 3...
या दूसरे शब्दों में, एक परिशिष्ट करने के लिए, पूरी सूची की प्रतिलिपि बनाने की आवश्यकता लगती है।
मेरे सवाल:
क्या मेरी सोच सही है? क्या संपूर्ण संरचना की नकल के बिना एक परिशिष्ट करने का कोई तरीका है?
जाहिरा तौर पर "प्रभावी जावा" में शामिल हैं:
जब तक वहाँ एक बहुत अच्छा कारण नहीं है कि उन्हें उत्परिवर्तित करने के लिए कक्षाएं अपरिवर्तनीय होनी चाहिए ...
क्या यह पारस्परिकता के लिए एक अच्छा मामला है?
मुझे नहीं लगता कि यह सुझाए गए उत्तर की नकल है क्योंकि मैं सूची के बारे में बात नहीं कर रहा हूं; यह स्पष्ट रूप से इंटरफेस के अनुरूप है (नई सूची को आंतरिक रूप से रखने और इसे पाने वाले की तरह पुनः प्राप्त करने के बिना कुछ करने के बिना, दूसरे विचार पर, हालांकि, यहां तक कि कुछ उत्परिवर्तन की आवश्यकता होगी; यह सिर्फ एक न्यूनतम तक रखा जाएगा)। मैं इस बारे में बात कर रहा हूं कि सूची के आंतरिक लोगों को अपरिवर्तनीय होना चाहिए या नहीं।

CopyOnWritexxxबहु-थ्रेडिंग के लिए उपयोग किए जाने वाले अविश्वसनीय रूप से महंगे वर्ग हैं। किसी को भी उम्मीद नहीं है कि संग्रह वास्तव में अपरिवर्तनीय होगा (हालाँकि यह कुछ विचित्रता पैदा करता है)