यह थोड़ा देर से लगता है लेकिन यहाँ मेरे दो सेंट हैं। हम नहीं कर सकते हैं List<int>
के रूप में int
एक आदिम प्रकार इसलिए हम केवल हो सकता है List<Integer>
।
जावा 8 (इंट सरणी)
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList());
जावा 8 और नीचे (पूर्णांक सरणी)
Integer[] integers = new Integer[] {1,2,3,4,5};
List<Integer> list21 = Arrays.asList(integers); // returns a fixed-size list backed by the specified array.
List<Integer> list22 = new ArrayList<>(Arrays.asList(integers)); // good
List<Integer> list23 = Arrays.stream(integers).collect(Collectors.toList()); //Java 8 only
ArrayList की जरूरत है और सूची की नहीं?
यदि हम List
उदाहरण के लिए एक विशिष्ट कार्यान्वयन चाहते हैं ArrayList
तो हम निम्नानुसार उपयोग कर सकते हैं toCollection
:
ArrayList<Integer> list24 = Arrays.stream(integers)
.collect(Collectors.toCollection(ArrayList::new));
list21
संरचनात्मक रूप से संशोधित क्यों नहीं किया जा सकता है?
जब हम Arrays.asList
लौटे सूची के आकार का उपयोग करते हैं, तो निश्चित है क्योंकि लौटी सूची नहीं है java.util.ArrayList
, लेकिन अंदर एक निजी स्थिर वर्ग परिभाषित किया गया है java.util.Arrays
। इसलिए अगर हम लौटी हुई सूची से तत्वों को जोड़ते या हटाते हैं, तो एक UnsupportedOperationException
फेंक दिया जाएगा। इसलिए list22
जब हम सूची को संशोधित करना चाहते हैं तो हमें साथ जाना चाहिए । अगर हमारे पास जावा 8 है तो हम भी साथ जा सकते हैं list23
।
स्पष्ट होने के लिए इस list21
अर्थ में संशोधित किया जा सकता है कि हम कॉल कर सकते हैं list21.set(index,element)
लेकिन यह सूची संरचनात्मक रूप से संशोधित नहीं हो सकती है अर्थात सूची से तत्वों को जोड़ या हटा नहीं सकती है। आप इस प्रश्न को भी देख सकते हैं ।
यदि हम एक अपरिवर्तनीय सूची चाहते हैं तो हम इसे इस प्रकार से लपेट सकते हैं:
List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));
एक और ध्यान देने वाली बात यह है कि यह विधि Collections.unmodifiableList
निर्दिष्ट सूची का एक अपरिवर्तनीय दृश्य लौटाती है। एक unmodifiable दृश्य संग्रह एक संग्रह है जो unmodifiable है और एक बैकिंग संग्रह पर एक दृश्य भी है। ध्यान दें कि बैकिंग संग्रह में परिवर्तन अभी भी संभव हो सकता है, और यदि वे होते हैं, तो वे असम्बद्ध दृश्य के माध्यम से दिखाई देते हैं।
हमारे पास जावा 9 और 10 में वास्तव में अपरिवर्तनीय सूची हो सकती है।
सच में अपरिवर्तनीय सूची
जावा 9:
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
जावा 10 (सच में अपरिवर्तनीय सूची) दो तरीकों से:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
अधिक के लिए मेरा यह उत्तर भी जांचें ।
Arrays.asList(new int[] { 1, 2, 3 })
:; निश्चित रूप से जावा 1.4.2 में संकलित नहीं किया था, क्योंकि एकint[]
है नहीं एकObject[]
।