public Object[] toArray() {
// Estimate size of array; be prepared to see more or fewer elements
Object[] r = new Object[size()];
Iterator<E> it = iterator();
for (int i = 0; i < r.length; i++) {
if (! it.hasNext()) // fewer elements than expected
return Arrays.copyOf(r, i);
r[i] = it.next();
}
return it.hasNext() ? finishToArray(r, it) : r;
}
के कार्यान्वयन में कोड का उपयोग AbstractCollection.toArray
विधि के कार्यान्वयन का कोड यहां दिया गया है।सारकोलेक्शन के टूएरे विधि
if (! it.hasNext()) // fewer elements than expected
return Arrays.copyOf(r, i);
मुझे उपरोक्त कोड के उपयोग को समझ में नहीं आता है। मुझे संदेह है कि विधि का उपयोग करते समय आकार बदलने से बचने के लिए कोड का उपयोग किया जाता है। तो मेरे पास दो प्रश्न हैं:
- मुझे क्या संदेह है कि सही या गलत है? यदि यह गलत है, तो इस कोड का उपयोग क्या है?
- यदि यह सच है, तो विधि को लागू करने के दौरान आकार बदलने से कौन सी स्थिति बदल सकती है?
शामिल नहीं होना चाहिए कि ", इसे आम तौर गारंटी है (सभी java.util के लिए उदाहरण के लिए। * Collection वर्ग) है कि एक संग्रह, जबकि यह दोहराया है परिवर्तन नहीं होगा" इस गणन के साथ सच था । इटरेटर सटीक विपरीत की गारंटी देता है: यह ठीक है (और इसकी उम्मीद है) पुनरावृत्त होने पर संग्रह को संशोधित करें। जावाडोक से: "संग्रह पर एक पुनरावर्तक। इटरेटर जावा संग्रह ढांचे में गणना का स्थान लेता है। इटरेटर दो तरीकों से गणनाओं से अलग होते हैं: इटरेटर कॉलर को पुनरावृत्ति के दौरान अंतर्निहित संग्रह से तत्वों को हटाने के लिए अनुमति देते हैं । " –
@AndreiBodnarescu Iterator's remove() विधि के लिए यह सच है। हालांकि इसे आम तौर पर संग्रह के निकालने() को उपयोग करने की अनुमति नहीं दी जाती है (कोशिश करते समय (iter.hasNext()) संग्रह .remove (iter.next()); ') – sfussenegger
https://gist.github.com/1438902 देखें मेरे लिए क्या मतलब था – sfussenegger