2009-10-09 12 views
11

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

मैं समझता हूं कि हर स्थिति में एक इटेटरेटर क्लोनिंग संभव नहीं है, लेकिन क्या एक एनेटरेटर को लिंक्डलिस्ट (या अपने राज्य को सहेजना और पुनर्स्थापित करना) में क्लोन करने का कोई तरीका है?

उत्तर

11

यह संभव होगा लेकिन सूर्य ने सुनिश्चित किया कि आप (कक्षा को निजी बनाकर) नहीं कर सकते हैं।

लेकिन हो सकता है कि आप एक सादे iterator() के बजाय listIterator() का उपयोग करके प्राप्त कर सकें। एक ListIterator दोनों दिशाओं में स्थानांतरित कर सकते हैं।

+0

ठीक है। मैं आगे के चरणों की संख्या को बचाऊंगा और फिर राज्य को पुनर्स्थापित करने के लिए चरणों की संख्या वापस जाउंगा। –

1

ListIterator के साथ आप अगले तत्व की अनुक्रमणिका को स्टोर कर सकते हैं, और उस सूचकांक के आधार पर एक नया ListIterator प्राप्त कर सकते हैं।

कुछ इस (जावा 1.5 उदाहरण) की तरह:

LinkedList<Integer> list = new LinkedList<Integer>(); 
ListIterator<Integer> lit = list.listIterator(0); 
<<do something here >> 
int index = lit.nextIndex(); 
ListIterator<Integer> litclone = list.listIterator(index); 
+7

लेकिन इंडेक्स से इटेटरेटर प्राप्त करने से शुरुआत से सूची को फिर से ब्राउज़ करना होगा। ऐसा लगता है कि मानक लाइब्रेरी के साथ सी ++ जैसी अन्य भाषाओं में एक सूचक जो अनिवार्य रूप से एक क्लोन का उत्पादन करने का एक बहुत ही महंगा तरीका है। –

संबंधित मुद्दे