Arrays.asList()
आदिम प्रकार की सरणियों के लिए लागू नहीं किया जा सकता, जैसा कि आप उम्मीद करते हैं। int[]
पर लागू होने पर, Arrays.asList()
Integer
एस की सूची के बजाय int[]
s की एक सूची उत्पन्न करता है। इसलिए आप int[]
की एक नव निर्मित सूची को घुमाते हैं।
यह जावा में विविध तर्क और जेनेरिक का एक सूक्ष्म व्यवहार है। Arrays.asList()
घोषित किया जाता है के रूप में
public static <T> List<T> asList(T... a)
इसलिए, यह कुछ प्रकार T
के कई तर्क ले और इन तर्कों से युक्त एक सूची का उत्पादन कर सकते हैं, या इसे प्रकार T[]
में से एक तर्क ले और (इस सरणी द्वारा समर्थित एक सूची प्रदान कि तरीका बताया गया है सकते हैं विविध तर्क काम करते हैं)।
हालांकि, दूसरा विकल्प काम करता है T
एक संदर्भ प्रकार (अर्थात नहीं एक आदिम प्रकार जैसे int
), केवल जब क्योंकि केवल संदर्भ प्रकार जेनरिक में प्रकार पैरामीटर के रूप में इस्तेमाल किया जा सकता है (और T
एक प्रकार पैरामीटर है)।
तो, यदि आप int[]
पास करते हैं, तो आपको T
= int[]
मिलता है, और आप कोड अपेक्षा के अनुसार काम नहीं करते हैं। लेकिन अगर आप (उदाहरण के लिए, Integer[]
) संदर्भ प्रकार की सरणी गुजरती हैं, आप T
= Integer
हो और सब कुछ काम करता है:
Integer[] arr = new Integer[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
Collections.shuffle(Arrays.asList(arr));
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
वाह !!! लेकिन सभी ने कहा कि सूची के लिए लागू परिवर्तन, सरणी एआर के साथ नहीं। यह क्यों काम करता है? – Dmitry
क्योंकि Arrays.asList() सरणी द्वारा समर्थित एक नई सूची बनाता है। यह सरणी की प्रतिलिपि नहीं करता है जैसा कि अन्य ने कहा है। Arrays.asList() द्वारा लौटाई गई सूची में प्रत्येक परिवर्तन भी इसे समर्थित सरणी को बदलता है। – ILMTitan
अब समझ में आया। लेकिन क्यों यह प्राचीन प्रकार के साथ काम नहीं करता है? – Dmitry