Tuesday 15 March 2011

java - Is there any way to "CAST" ArrayList to CopyOnWriteArrayList -


मुझे पता है कि, कास्टिंग सही शब्द नहीं है जब

  java.lang.Object - & gt; java.util.concurrent.CopyOnWriteArrayList & LT; ई & gt;   

और

  java.lang.Object - & gt; java.util.AbstractCollection & LT; ई & gt; - & gt; java.util.AbstractList & LT; ई & gt; - & gt; java.util.ArrayList & LT; ई & gt;   

लेकिन मुझे क्या चाहिए CopyOnWriteArrayList के ArrayList के व्यवहार को जोड़ना है।

उदाहरण:
मैं निम्नलिखित करना चाहता हूं। लेकिन tstArry एक ArrayList है। (Testcls.getVal1 ()। बराबर ("a1")) tstArry.remove (testCls) के लिए नहीं CopyOnWriteArrayList

  के लिए (TestCls testCls: tstArry);   

या यह काम करने का एकमात्र तरीका है?

  के लिए (int i = 0; i & lt; tstArry.size (); i ++ ) अगर (tstArry.get (i) .getVal1 ()। बराबर ("a1")) tstArry.remove (i--);   

tstArry एक वर्ग से एक ArrayList है जिस पर मेरे पास नियंत्रण नहीं हुआ है। इसलिए, कृपया बदलते हुए प्रकार के ArrayList को दूसरे तक पहुंचाएं।

आप ' उन्नत प्रत्येक के लिए प्रत्येक लूप का उपयोग करते समय टी को हटाएं () चलने वाले संग्रह से। प्रत्येक लूप के लिए अन्तर्निहित रूप से उपयोग करता है स्पष्ट रूप से कहा गया है कि Iterator () और listIterator () methods fail-fast

/ Em>: यदि सूची स्थैतिक रूप से इटरेटर के बाद किसी भी समय संरचनात्मक रूप से संशोधित होती है, तो इटरेटर के स्वयं के को हटायें () या add () विधियों के अलावा, इरेटरेटर एक समवर्ती सुधारकरण अवधारणा फेंक देगा।

प्रत्येक के लिए लूप इनरेटर को आंतरिक रूप से बनाता है और इसे सूची में आने के लिए इसका इस्तेमाल करता है। तब आप सूची की संरचना बदलते हैं ... और इटरेटर को असफल होना पड़ता है। बात यह है कि आपके पास इटरेटर विधियों तक पहुंच नहीं है, इसलिए आपको Iterator & lt; TestCls & gt; स्पष्ट रूप से उपयोग करना होगा व्युत्पन्न ट्रैवर्सिंग बाइटकोड समान होगा, केवल एकमात्र अंतर यह है कि आप सूची से तत्वों को दूर करने में सक्षम हैं।

  के लिए (इटरेटर & lt; TestCls & gt; iter = tstArry.iterator (); Iter.hasNext ();) {TextCls testCls = iter.next (); अगर (testCls.getVal1 ()। बराबर ("a1")) {iter.remove (); }}   

संपादन के रूप में स्पष्ट रूप से स्पष्ट रूप से आप iterators और उनके कार्य से परिचित नहीं हैं से:

एक ऐसा ऑब्जेक्ट है जो आपको एक संग्रह के माध्यम से पार करने और चुनिंदा संग्रह से तत्वों को निकालने के लिए सक्षम बनाता है, यदि वांछित। iterator () विधि को कॉल करके एक संग्रह के लिए आपको ईटरेटर मिलता है।

ध्यान दें कि Iterator.remove () पुनरावृत्ति के दौरान एक संग्रह को संशोधित करने का एकमात्र सुरक्षित तरीका है; व्यवहार अनिर्दिष्ट है यदि अंतर्निहित संग्रह किसी अन्य तरीके से संशोधित किया जाता है, जबकि चलना चालू है।

Iterator का उपयोग करें के लिए प्रत्येक जब आपको इसकी आवश्यकता होती है तब निर्माण करें:

  • वर्तमान तत्व निकालें प्रत्येक के लिए निर्माण इटरेटर को छुपाता है, इसलिए आप remove () को कॉल नहीं कर सकते। इसलिए, फ़िल्टर के लिए प्रत्येक निर्माण उपयोगी नहीं है।

No comments:

Post a Comment