मैं एक संग्रह के माध्यम से पुनरावृति करने के लिए एक Iterator का उपयोग कर रहा हूं और मैं वर्तमान तत्व का सूचकांक प्राप्त करना चाहता हूं।
मैं उसे कैसे कर सकता हूँ?
मैं एक संग्रह के माध्यम से पुनरावृति करने के लिए एक Iterator का उपयोग कर रहा हूं और मैं वर्तमान तत्व का सूचकांक प्राप्त करना चाहता हूं।
मैं उसे कैसे कर सकता हूँ?
जवाबों:
अपने स्वयं के चर का उपयोग करें और इसे लूप में बढ़ाएं।
it.nextIndex()
। उपयोगी जब संग्रह एक सूची है।
मेरे पास एक ही सवाल था और एक ListIterator ने काम किया। उपरोक्त परीक्षण के समान:
List<String> list = Arrays.asList("zero", "one", "two");
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());
}
सुनिश्चित करें कि आप अगली कॉल करते हैं, इससे पहले कि आप वास्तव में अगला () प्राप्त करें।
यहाँ अपने चर का उपयोग करने और इसे संक्षिप्त रखने का एक तरीका है:
List<String> list = Arrays.asList("zero", "one", "two");
int i = 0;
for (Iterator<String> it = list.iterator(); it.hasNext(); i++) {
String s = it.next();
System.out.println(i + ": " + s);
}
आउटपुट (आपने अनुमान लगाया):
0: zero
1: one
2: two
लाभ यह है कि आप अपने सूचकांक को लूप के भीतर नहीं बढ़ाते हैं (हालांकि आपको प्रति लूप के बाद केवल # इटरेटर को कॉल करने के लिए सावधान रहने की आवश्यकता है - बस इसे शीर्ष पर करें)।
asList("zero", "one", "two")
आप ListIterator
गिनती करने के लिए उपयोग कर सकते हैं :
final List<String> list = Arrays.asList("zero", "one", "two", "three");
for (final ListIterator<String> it = list.listIterator(); it.hasNext();) {
final String s = it.next();
System.out.println(it.previousIndex() + ": " + s);
}
किस तरह का संग्रह? यदि यह सूची इंटरफ़ेस का कार्यान्वयन है तो आप बस उपयोग कर सकते हैं it.nextIndex() - 1
।
बस कुछ इस तरह से करें:
ListIterator<String> it = list1.listIterator();
int index = -1;
while (it.hasNext()) {
index++;
String value = it.next();
//At this point the index can be checked for the current element.
}
एक इंट का उपयोग करें और इसे अपने लूप के भीतर बढ़ाएँ।
देखें यहाँ ।
iterator.nextIndex()
तत्व का सूचकांक प्रदान करेगा जिसे बाद में कॉल करके वापस किया जाएगा next()
।
आप सभी को इसे itter.nextIndex () का उपयोग करने की आवश्यकता है, जो वर्तमान में चालू है, इसे वापस करने के लिए। अपने स्वयं के काउंटर चर का उपयोग करने की तुलना में यह थोड़ा आसान हो सकता है (जो अभी भी काम करता है)।
public static void main(String[] args) {
String[] str1 = {"list item 1", "list item 2", "list item 3", "list item 4"};
List<String> list1 = new ArrayList<String>(Arrays.asList(str1));
ListIterator<String> it = list1.listIterator();
int x = 0;
//The iterator.nextIndex() will return the index for you.
while(it.hasNext()){
int i = it.nextIndex();
System.out.println(it.next() + " is at index" + i);
}
}
यह कोड एक समय में सूची 1 सूची में से एक आइटम के माध्यम से जाएगा और आइटम के पाठ को प्रिंट करेगा, फिर "इंडेक्स में है" फिर यह उस इंडेक्स को प्रिंट करेगा जिसे इट्रेटर ने इसे पाया था। :)
हालांकि आपके पास पहले से ही उत्तर था, कुछ जानकारी जोड़ने के लिए सोचा।
जैसा कि आपने स्पष्ट रूप से संग्रह का उल्लेख किया है, आप listIterator
सभी प्रकार के संग्रह के लिए सूचकांक प्राप्त करने के लिए उपयोग नहीं कर सकते ।
सूची इंटरफेस - एरियरिस्ट, लिंक्डलिस्ट, वेक्टर और स्टैक।
दोनों है iterator()
औरlistIterator()
सेट इंटरफेस - हैशसेट, लिंक्डहाशसेट, ट्रीसेट और एनुसेट।
केवल है iterator()
मैप इंटरफेस - हैशपैप, लिंक्डहाशपैप, ट्रीपैप और आइडेंटिटी हाशप
कोई iterators है, लेकिन के माध्यम से उपयोग करते हुए दोहराया जा सकता है keySet()
/ values()
या entrySet()
के रूप में keySet()
और entrySet()
रिटर्न Set
और values()
रिटर्न Collection
।
तो iterators()
किसी भी संग्रह प्रकार के लिए वर्तमान सूचकांक प्राप्त करने के लिए मूल्य में निरंतर वृद्धि के साथ इसका उपयोग करना बेहतर है ।