मेरे पास एक लिंक्डलिस्ट है जिस पर मुझे कई बार पीछे और पीछे की आवश्यकता है। मैं वर्कफ़्लो में पृष्ठों की एक श्रृंखला का ट्रैक रखने के लिए इसका उपयोग कर रहा हूं जो गतिशील रूप से बनाया जाएगा। जैसा कि मैं उम्मीद करता हूं यह व्यवहार नहीं करता है।जावा में एक लिंक्डलिस्ट पर आगे और आगे जाने के लिए ListIterator का उपयोग
LinkedList<String> navigationCases;
navigationCases.add("page1");
navigationCases.add("page2");
navigationCases.add("page3");
navigationCases.add("page4");
ListIterator navigationItr = navigationCases.listIterator();
navigationItr.next(); // Returns page1
navigationItr.next(); // Returns page2
navigationItr.previous(); //Returns page2 again
navigationItr.next(); //Returns page2 again
मैं शायद सोचा था कि मैं गलत तरीके से अपनी सूची का निर्माण किया गया था, या इटरेटर गलत उपयोग करते हुए, लेकिन प्रलेखन पढ़ने के बाद, इस डिजाइन से हो रहा है: इस उदाहरण को देखते हुए
एक ListIterator कोई मौजूदा है तत्व; इसकी कर्सर स्थिति हमेशा उस तत्व के बीच होती है जो पिछले() और उस कॉल को वापस कॉल द्वारा वापस कर दी जाएगी जिसे कॉल द्वारा अगले() पर वापस किया जाएगा।
और:
(अगला) सूची में अगले तत्व देता है। इस विधि को सूची के माध्यम से पुनरावृत्त करने के लिए बार-बार कहा जा सकता है, या आगे और आगे जाने के लिए कॉल के साथ इंटरमीक्स किया जा सकता है। (ध्यान दें कि अगली और पिछली बार कॉल करने के लिए कॉल बार-बार वही तत्व लौटाएंगे।)
तो इसे पढ़ने के बाद, यह स्पष्ट है कि मेरा कोड इस तरह से व्यवहार क्यों कर रहा है। मुझे समझ में नहीं आता कि इसे इस तरह क्यों काम करना चाहिए। यहां तक कि इस कार्यान्वयन को समायोजित करने के लिए पीछे की तरफ झुकना प्रतीत होता है:
ध्यान दें कि कर्सर स्थिति के संदर्भ में निकालें() और सेट (ऑब्जेक्ट) विधियों को परिभाषित नहीं किया गया है; उन्हें अगली() या पिछले() पर कॉल द्वारा लौटाए गए अंतिम तत्व पर काम करने के लिए परिभाषित किया जाता है।
संकल्पनात्मक रूप से, एक लिंक्डलिस्ट मेरे वर्कफ़्लो मामलों को बहुत अच्छी तरह से मॉडल करने लगती थी, लेकिन मैं इस तरह से व्यवहार करने वाले इटरेटर का उपयोग नहीं कर सकता। क्या मुझे यहां कुछ याद आ रही है, या क्या मुझे अपनी खुद की कक्षा को मामलों की सूची बनाए रखना चाहिए और उनसे नेविगेट करना चाहिए?
आप "इस तरह से व्यवहार करने वाले एक इटरेटर का उपयोग क्यों नहीं कर सकते"? बाकी दुनिया करता है। बस स्वीकार करें कि यह कैसे काम करता है और इसका लाभ उठाने के लिए इसका उपयोग किया जाता है। – Madbreaks
यह इस तरह से व्यवहार करता है क्योंकि यह अंत कार्य से शुरू होने से शुरू होता है और शुरुआत से ही शुरू होता है। –
@ मैडब्रेक्स इस उपयोग के मामले को "उपयोग करने के इरादे" से अलग कैसे किया जाता है? अगले के लिए पूछने के तुरंत बाद पिछले तत्व के बारे में पूछने के "विशेष" मामले के लिए मैं कैसे खाता करूं? या पिछले के लिए पूछने के तुरंत बाद पूछना? – user1535568