2010-05-10 9 views
5

सी + में एक अनुक्रम में लिखने के लिए इटरेटर का उपयोग कर सकते हैं। सबसे सरल उदाहरण होगा:क्या जावा में एक लिखने योग्य इटरेटर है?

vector<int> v; 
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) { 
    *it = 42; 
} 

मैं कुछ और अधिक जटिल की जरूरत है - एक बाद में उपयोग के लिए एक वर्ग के सदस्य के रूप में इटरेटर रहते हैं। लेकिन मुझे नहीं पता कि यह व्यवहार जावा इटेटर से कैसे प्राप्त करें।

क्या जावा में लिखने योग्य इटरेटर हैं?
यदि नहीं तो क्या उन्हें बदल देता है?

उत्तर

8

ListIterator (आप List#listIterator() द्वारा प्राप्त कर सकते हैं) add() और set() तरीकों जो आप क्रमशः डालने और वर्तमान में दोहराया अनुक्रमणिका में आइटम को बदलने के लिए अनुमति देता है। यह अभी तक एकमात्र "लिखने योग्य इटरेटर" है जैसा कि मैं जावा में सोच सकता हूं।

यह सुनिश्चित नहीं है कि अगर यह सी ++ कोड का सटीक प्रतिस्थापन है, तो मुझे सी ++ नहीं पता है।

+0

धन्यवाद। क्या सरणी के लिए ऐसा कुछ है? –

+2

@ लुकाज़: आप सरणी को 'Arrays.asList' के साथ एक सूची (निरंतर समय में) में बदल सकते हैं और फिर उस से एक सूची इटरेटर प्राप्त कर सकते हैं। – sepp2k

+1

नहीं, आपको सरणी पर 'सूची' पसंद करना चाहिए। 'सूची' एक सरणी का जावा अबास्ट्रक्शन है और आप गतिशील रूप से विस्तार योग्य सरणी रखने के लिए' ArrayList' का उपयोग कर सकते हैं। 'सूची' (जो जावा संग्रह API का हिस्सा है) के बारे में अधिक जानने के लिए, [विषय पर सूर्य ट्यूटोरियल] (http://java.sun.com/docs/books/tutorial/collections/index.html) देखें। – BalusC

2

जैसे ही सरणी को उनके सूचकांक द्वारा सीधे और जल्दी से पहुंचा जा सकता है, आपको वास्तव में एक इटरेटर ऑब्जेक्ट की आवश्यकता नहीं है। क्या उस वर्ग के सदस्य में सरणी की अनुक्रमणिका को सहेजने के लिए नहीं सोचा जाएगा? यह सरणी के मान को पढ़ने और लिखने की अनुमति देगा।

पीएस: आप एक ऐरेलिस्ट का उपयोग कर सकते हैं, जो स्वचालित रूप से सरणी का बढ़ता सेट है और इटरेटर-ऑब्जेक्ट-दृष्टिकोण का उपयोग करने के लिए लिस्टस के रूप में लिस्टस के रूप में लिस्ट इटरेटर का उपयोग कर सकता है।

+0

एक मूल्य int सेट करने के लिए पर्याप्त नहीं होगा। मुझे int और सरणी दोनों की आवश्यकता है। –

0

आपको लगता है कि आप List (या शायद कुछ अन्य संग्रह, जैसे Set) या एक सरणी चाहते हैं।

इसके अलावा, आप बस अपनी सामग्री को व्यवहार्य बना सकते हैं। यह पूर्णांक के लिए मूर्खतापूर्ण दिखता है, लेकिन आपका उदाहरण

for (MutableInteger i : CollectionOfMInts) i.setTo(42); 
संबंधित मुद्दे