List.copyOf
M अपरिवर्तनीय सूची
तुम ने पूछा था:
क्या सूची की एक प्रति असाइन करने का कोई अन्य तरीका नहीं है
जावा 9 अज्ञात कंक्रीट क्लास के List.of
एक अपरिवर्तनीय बनाने के लिए शाब्दिक का उपयोग करने के तरीके लाया List
।
LocalDate today = LocalDate.now( ZoneId.of( "Africa/Tunis" ) ) ;
List< LocalDate > dates = List.of(
today.minusDays( 1 ) , // Yesterday
today , // Today
today.plusDays( 1 ) // Tomorrow
);
साथ ही हम भी मिले List.copyOf
। यह विधि भी List
अज्ञात ठोस वर्ग का एक अपरिवर्तनीय रिटर्न देती है ।
List< String > colors = new ArrayList<>( 4 ) ; // Creates a modifiable `List`.
colors.add ( "AliceBlue" ) ;
colors.add ( "PapayaWhip" ) ;
colors.add ( "Chartreuse" ) ;
colors.add ( "DarkSlateGray" ) ;
List< String > masterColors = List.copyOf( colors ) ; // Creates an unmodifiable `List`.
"अपरिहार्य" से हमारा तात्पर्य सूची में तत्वों की संख्या से है, और एक तत्व के रूप में प्रत्येक स्लॉट में रखी गई वस्तु संदर्भ निर्धारित है। आप तत्वों को जोड़, गिरा या प्रतिस्थापित नहीं कर सकते। लेकिन प्रत्येक तत्व में रखी गई वस्तु रेफ़रेन्स परस्पर नहीं हो सकती है ।
colors.remove( 2 ) ; // SUCCEEDS.
masterColors.remove( 2 ) ; // FAIL - ERROR.
इस कोड को IdeOne.com पर लाइव देखें ।
date.toString (): [2020-02-02, 2020-02-03, 2020-02-04]
color.toString (): [एलिसब्लू, पपीवाशिप, डार्कस्लेटग्रे]
MasterColors.toString (): [एलिसब्लू, पपीवाशिप, चार्टरेयूज़, डार्कस्लाइगड]
आपने ऑब्जेक्ट संदर्भ के बारे में पूछा। जैसा कि अन्य ने कहा, यदि आप एक सूची बनाते हैं और इसे दो संदर्भ चर (पॉइंटर्स) में असाइन करते हैं, तो आपके पास अभी भी केवल एक सूची है। दोनों एक ही सूची की ओर इशारा करते हैं। यदि आप सूची को संशोधित करने के लिए या तो पॉइंटर का उपयोग करते हैं, तो दोनों संकेत बाद में परिवर्तन देखेंगे, क्योंकि स्मृति में केवल एक सूची है।
इसलिए आपको सूची की एक प्रति बनाने की आवश्यकता है। यदि आप चाहते हैं कि प्रतिलिपि अचूक हो, तो List.copyOf
इस उत्तर में चर्चा की गई विधि का उपयोग करें । इस दृष्टिकोण में, आप दो अलग-अलग सूचियों के साथ समाप्त होते हैं, प्रत्येक ऐसे तत्वों के साथ जो एक ही सामग्री ऑब्जेक्ट का संदर्भ रखते हैं। उदाहरण के लिए, String
रंगों का प्रतिनिधित्व करने के लिए वस्तुओं का उपयोग करने के ऊपर हमारे उदाहरण में , रंग की वस्तुएं कहीं न कहीं स्मृति में तैर रही हैं। दो सूचियाँ एक ही रंग की वस्तुओं की ओर संकेत करती हैं। यहाँ एक चित्र है।
पहली सूची colors
परिवर्तनीय है। इसका मतलब है कि कुछ तत्वों को ऊपर के कोड में देखा जा सकता है, जहां हमने मूल 3 तत्व Chartreuse
(2 = क्रमिक 3 का सूचकांक) को हटा दिया था । और तत्वों को जोड़ा जा सकता है। और तत्वों को कुछ अन्य के लिए इंगित करने के लिए बदला जा सकता है String
जैसे OliveDrab
या CornflowerBlue
।
इसके विपरीत, चार तत्व masterColors
तय होते हैं। कोई हटाने, कोई जोड़ नहीं, और कोई अन्य रंग प्रतिस्थापित नहीं। यह List
कार्यान्वयन अमोघ है।