2016-05-03 4 views
5

Arrays.asList एक उपयोगी और सुविधाजनक तरीका है, लेकिन यह रिटर्न एक List जिसका आकार तय हो गई है, जैसे कि कोई तत्व या जोड़ा जा सकता है के साथ add या remove (UnsupportedOperationException फेंक दिया जाता है) को हटा दिया।Arrays.asList एक निश्चित आकार की सूची क्यों देता है?

क्या इसके लिए कोई अच्छा कारण है? यह मेरे लिए एक अजीब प्रतिबंध की तरह दिखता है।

documentation इसके पीछे कारण की व्याख्या नहीं करता है:

एक निश्चित-आकार सूची निर्दिष्ट सरणी द्वारा समर्थित देता है।

+2

कोई अन्य सूची बनाएं, उदा। 'नया ऐरेलिस्ट (asList (...))' या 'नया लिंक्डलिस्ट (asList (...))' – kan

+0

प्रलेखन कहता है कि यह "निर्दिष्ट सरणी का एक सूची दृश्य" देता है, इसलिए इसे समझना चाहिए आकार के। – manouti

उत्तर

13

मुद्दा यह है कि Arrays.asList एक सरणी के दृश्य लौट रहा है, और सरणी में परिवर्तन List और इसके विपरीत में परिलक्षित होते हैं कि है। यह एक प्रतिलिपि नहीं बना रहा है, यह List इंटरफ़ेस का एक बहुत ही सरल कार्यान्वयन है जो निर्दिष्ट सरणी को List के रूप में व्याख्या करता है। नतीजतन, Arrays.asList वास्तव में केवल यह दर्शाता है कि जावा सरणी निश्चित आकार भी हैं। आप या तो बैकिंग सरणी से तत्व जोड़ या निकाल नहीं सकते हैं।

जैसा कि टिप्पणियों में बताया गया है, उदाहरण के साथ एक सरणी से एक चर-आकार सूची प्राप्त करना काफी आसान है। new ArrayList<>(Arrays.asList(array))

इसके अलावा, इसके लायक होने के लिए: अमरूद वास्तव में regrets "varargs तर्कों से आकार बदलने योग्य सूची" विधि प्रदान करते हुए यह पता लगाने के बाद कि अधिकांश लोग इसका उपयोग करते हैं वास्तव में वास्तव में एक अपरिवर्तनीय सूची चाहते थे।

संबंधित मुद्दे