2013-05-20 13 views
25

इम को एक ArrayList की एक subList परिवर्तित एक ArrayList का उपयोग करने और im एक और ArrayList करने के लिए इसे का एक हिस्सा कॉपी करने के लिए इसलिए का उपयोग कर im कोशिश कर:एक ArrayList

कहाँ "sibling.keys" नए ArrayList है और "कुंजी या यह .keys" पुरानी ArrayList है। मैं कास्टिंग इस्तेमाल किया क्योंकि ग्रहण मुझे ऐसा करने के लिए कहा, लेकिन फिर फेंक देता है एक ClassCastException:

java.util.ArrayList $ SubList java.util.ArrayList

किसी भी सलाह में ढाला नहीं जा सकता है?

उत्तर

71

subList एक मौजूदा सूची में देखें। यह ArrayList नहीं है। आप इसके बारे में एक प्रतिलिपि बना सकते हैं:

sibling.keys = new ArrayList<Integer>(keys.subList(mid, this.num)); 

या यदि आप दृश्य व्यवहार से खुश हैं, ताकि आप की जरूरत नहीं है, sibling.keys का प्रकार बदलने के लिए सिर्फ ArrayList<Integer> के बजाय List<Integer> बनने की कोशिश प्रतिलिपि बनाने के लिए:

sibling.keys = keys.subList(mid, this.num); 

यह है कि आप अंतर यद्यपि को समझना ज़रूरी है - आप sibling.keys (जैसे यह करने के लिए मूल्यों को जोड़ने या बदलने के मौजूदा तत्वों) उत्परिवर्तित जा रहे हैं? क्या आप keys को म्यूटेट करने जा रहे हैं? क्या आप एक सूची को दूसरे को प्रभावित करने के लिए उत्परिवर्तन चाहते हैं?

+0

मेरे लिए काम करने वाला एक और आसान विकल्प sibling.keys.addAll (keys.subList (मध्य, this.num)) था; यह माना जा रहा है कि sibling.keys पहले ही प्रारंभ हो चुकी है। addAll() बस उपन्यास के प्रत्येक आइटम की प्रतिलिपि बनाता है। –

-1

Array.subListArrayList वापस नहीं करता है, लेकिन List

तो निम्न पंक्ति काम करता है:

List<Integer> keys = (List<Integer>) keys.subList(mid, this.num); 

ध्यान दें कि कलाकारों वैकल्पिक है।

+1

यह पहले से ही 'सूची ' लौटाता है। यह कास्ट अनावश्यक है। – IlyaEremin

0

आप क्योंकि आप जबकि ArrayList.subList एक ArraList() उम्मीद कर रहे हैं वापस नहीं करता है ArrayList वर्ग डाली अपवाद मिलता है। अपनी sibling.keys को ArrayList से सूची में बदलें, और ठीक काम करना चाहिए। यह ClassCastException से बच जाएगा साथ ही आपको किसी भी कलाकार की आवश्यकता नहीं होगी।