java bike Arrays.asList() द्वारा बनाई गई सूची पर निकालें() असमर्थितऑपरेशन अपवाद फेंकता है




java jdk (3)

Arrays.asList एक सरणी के चारों ओर एक List रैपर देता है। इस रैपर का एक निश्चित आकार होता है और सीधे सरणी द्वारा समर्थित किया जाता है, और set करने के लिए इस तरह के कॉल सरणी को संशोधित करेंगे, और सूची को संशोधित करने वाली कोई अन्य विधि एक UnsupportedOperationException फेंक देगी।

इसे ठीक करने के लिए, आपको रैपर सूची की सामग्री कॉपी करके एक नई संशोधित सूची बनाना होगा। ArrayList कन्स्ट्रक्टर का उपयोग करके ऐसा करना आसान है जो Collection लेता है:

Collection c = new ArrayList(Arrays.asList(la));

मेरे पास संग्रह c1<MyClass> और एक सरणी a<MyClass> । मैं सरणी को संग्रह c2 बदलने की कोशिश कर रहा हूं और c1.removeAll(c2) करता c1.removeAll(c2) , लेकिन यह UnsupportedOperationException c1.removeAll(c2) फेंकता है। मैंने पाया कि Arrays क्लास के asList() Arrays देता है। Arrays.ArrayList क्लास और इस वर्ग को asList() से asList() को विरासत में मिला है जिसका कार्यान्वयन UnsupportedOperationException Arrays.ArrayList को फेंकता है।

    Myclass la[] = getMyClass();
    Collection c = Arrays.asList(la);
    c.removeAll(thisAllreadyExistingMyClass);

क्या तत्वों को हटाने का कोई तरीका है? कृपया सहायता कीजिए


Answer #1

हाँ, Arrays.asList(..) संग्रह है जिसे विस्तारित या Arrays.asList(..) नहीं किया जा सकता है (क्योंकि यह मूल सरणी द्वारा समर्थित है, और इसका आकार बदला नहीं जा सकता है)।

यदि आप तत्वों को हटाना चाहते हैं तो या तो एक new ArrayList(Arrays.asList(..) या सीधे सरणी से तत्वों को हटा दें (जो कम कुशल और लिखने में कठिन होगा)


Answer #2

यही तरीका है Array.asList() काम करता है, क्योंकि यह सीधे सरणी द्वारा समर्थित है। पूरी तरह से संशोधित सूची प्राप्त करने के लिए, आपको संग्रह को अपने द्वारा बनाए गए संग्रह में क्लोन करना होगा।

Collection c = new ArrayList(Arrays.asList(la))




java