मैं जावा में नया हूँ और मैं पुनरावृत्त और पुनरावृत्त के साथ भ्रमित हूँ। क्या कोई मुझे समझा सकता है और कुछ उदाहरण दे सकता है?
मैं जावा में नया हूँ और मैं पुनरावृत्त और पुनरावृत्त के साथ भ्रमित हूँ। क्या कोई मुझे समझा सकता है और कुछ उदाहरण दे सकता है?
जवाबों:
एक Iterable
तत्व उस पर दोहराया जा सकता है की एक श्रृंखला के लिए एक सरल प्रतिनिधित्व है। इसमें "वर्तमान तत्व" जैसी कोई पुनरावृत्ति स्थिति नहीं है। इसके बजाय, इसकी एक विधि है जो एक उत्पादन करती है Iterator
।
एक Iterator
वस्तु है जो पुनरावृति अवस्था के साथ है। यह आपको यह जांचने देता है कि क्या इसका उपयोग करने वाले अधिक तत्व हैं hasNext()
और अगले तत्व (यदि कोई है) का उपयोग करना है next()
।
आमतौर पर, Iterable
किसी भी मान्य Iterator
एस की संख्या का उत्पादन करने में सक्षम होना चाहिए ।
एक कार्यान्वयन वह Iterable
है जो Iterator
स्वयं को प्रदान करता है:
public interface Iterable<T>
{
Iterator<T> iterator();
}
असाइनमेंट विशेषाधिकारों के बिना डेटा के संग्रह के माध्यम से कुछ लूप को अनुमति देने का एक सरल तरीका है (हालांकि निकालने की क्षमता के साथ)।
public interface Iterator<E>
{
boolean hasNext();
E next();
void remove();
}
जावदोक को देखें ।
मैं विशेष रूप से ArrayList के बारे में प्रश्न का उत्तर दूंगा ताकि आप बेहतर तरीके से समझ सकें।
public interface Iterable { ... abstract Iterator<T> iterator(); //Returns an 'Iterator'(not iterator) over elements of type T. ... }
public interface Iterator { ... abstract boolean hasNext(); //Returns true if the iteration has more elements. abstract E next(); //Returns the next element in the iteration. ... }
'Iterable <- संग्रह <- सूची <- ArrayList'
। और अनुपयोगी, संग्रह और सूची केवल अमूर्त विधि 'पुनरावृत्ति ()' की घोषणा करती है और अकेले ArrayList इसे लागू करता है।
'iterator ()' विधि 'Ir' श्रेणी की एक वस्तु लौटाती है जो 'Iterator' को लागू करती है।
public class ArrayList<E> ... implements List<E>, ... { ... public Iterator<E> iterator() { return new Itr(); } private class Itr implements Iterator<E> { ... public boolean hasNext() { return cursor != size; } @SuppressWarnings("unchecked") public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; } ... } }
ये रहा एक सरल उदाहरण।
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String string = iterator.next();
System.out.println(string);
}
}
अब, यह स्पष्ट है? :)
Iterable<T>
इस परिदृश्य में है तो हमें किन चरणों को लागू करने की आवश्यकता है? कृपया सुझाव दें कि उदाहरण भी दें।
यदि कोई संग्रह पुनरावृत्ति करने योग्य है, तो उसे पुनरावृति का उपयोग करके पुनरावृत्त किया जा सकता है (और फलस्वरूप प्रत्येक लूप के लिए उपयोग किया जा सकता है।) इट्रेटर वास्तविक वस्तु है जो संग्रह के माध्यम से पुनरावृति करेगा।
java.lang.Iterable
?
java.lang.Iterable
Iterable इंटरफ़ेस को लागू करने से किसी ऑब्जेक्ट को "foreach" स्टेटमेंट का लक्ष्य होने की अनुमति मिलती है।
class SomeClass implements Iterable<String> {}
class Main
{
public void method()
{
SomeClass someClass = new SomeClass();
.....
for(String s : someClass) {
//do something
}
}
}
Iterator एक इंटरफ़ेस है, जिसमें तत्वों पर पुनरावृति के लिए कार्यान्वयन है। Iterable एक इंटरफ़ेस है जो Iterator प्रदान करता है।
सबसे महत्वपूर्ण विचार यह है कि क्या प्रश्न में आइटम को एक से अधिक बार ट्रैवर्स किया जा सकता है। ऐसा इसलिए है क्योंकि आप इट्रेटर () को फिर से कॉल करके हमेशा एक Iterable को रिवाइंड कर सकते हैं, लेकिन Iterator को रिवाइंड करने का कोई तरीका नहीं है।
जैसा कि यहां बताया गया है , " Iterable " को foreach
लूप में उपयोग करने में सक्षम होने के लिए पेश किया गया था । Iterable इंटरफ़ेस लागू करने वाला एक वर्ग इससे अधिक पुनरावृत्त हो सकता है।
Iterator वह वर्ग है जो एक Iterable पर पुनरावृत्ति का प्रबंधन करता है । यह उस स्थिति को बनाए रखता है जहां हम वर्तमान पुनरावृत्ति में हैं, और जानते हैं कि अगला तत्व क्या है और इसे कैसे प्राप्त किया जाए।
10 सेब वाले एक उदाहरण पर विचार करें। जब यह Iterable को लागू करता है, तो यह प्रत्येक सेब को 1 से 10 तक बक्से में डालने और एक पुनरावृत्तिकर्ता को वापस करने के लिए होता है, जिसका उपयोग नेविगेट करने के लिए किया जा सकता है।
पुनरावृति लागू करके, हम किसी भी सेब, सेब को अगले बक्से आदि में प्राप्त कर सकते हैं।
तो चलने योग्य लागू करने से इट्रेटर अपने तत्वों को नेविगेट करने के लिए देता है हालांकि नेविगेट करने के लिए, पुनरावृत्ति को लागू करने की आवश्यकता है।
प्रश्न: Iterable और Iterator में अंतर है?
उत्तर:
iterable: यह forEach लूप itter से संबंधित है: यह
संग्रह से संबंधित है
फॉरच लूप का लक्ष्य तत्व दोहराए जाने योग्य है।
हम संग्रह से एक-एक करके वस्तु प्राप्त करने के लिए Iterator का उपयोग कर सकते हैं
Java.avaang पैकेज में मौजूद मौजूद
java.util पैकेज में मौजूद Iterator
इसमें केवल एक विधि पुनरावृत्ति शामिल है ()
विधि पुनरावृत्ति शामिल है तीन विधि hasNext (), अगला (), निकालें () शामिल हैं
1.2 संस्करण में प्रस्तुत 1.5 संस्करण में प्रस्तुत किया गया है
मूल रूप से, दोनों एक-दूसरे से बहुत निकट से संबंधित हैं।
आइटरेटर पर विचार करें जो एक इंटरफ़ेस है जो हमें कुछ अपरिभाषित विधियों जैसे हैनक्स्ट (), अगले () और हटाने () की मदद से संग्रह के माध्यम से पता लगाने में मदद करता है
दूसरी तरफ, Iterable एक अन्य इंटरफ़ेस है, जिसे यदि किसी वर्ग द्वारा कार्यान्वित किया जाता है, तो वह कक्षा को Iterable होने के लिए बाध्य करता है और For-प्रत्येक निर्माण के लिए एक लक्ष्य है। इसमें इट्रेटर () नाम का केवल एक ही तरीका है जो Iterator इंटरफ़ेस से ही आता है।
जब एक संग्रह चलने योग्य होता है, तो एक पुनरावृत्त का उपयोग करके इसे पुनरावृत्त किया जा सकता है।
समझने के लिए इन पर जाएँ:
ITERABLE: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java
ITERATOR http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java
मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन इसे पढ़ने वाले किसी भी व्यक्ति के लिए जो एक ही प्रश्न के साथ अटका हुआ है और जो सभी शब्दावली से अभिभूत हो सकता है, यहाँ एक अच्छा, सरल सादृश्य है जो आपको पुनरावृत्तियों और पुनरावृत्तियों के बीच इस अंतर को समझने में मदद करेगा:
एक सार्वजनिक पुस्तकालय के बारे में सोचो। पुराना स्कूल। कागज की किताबों के साथ। हां, उस तरह की लाइब्रेरी।
पुस्तकों से भरा एक शेल्फ एक पुनरावृत्ति की तरह होगा। आप शेल्फ में पुस्तकों की लंबी लाइन देख सकते हैं। आप नहीं जानते होंगे कि कितने हैं, लेकिन आप देख सकते हैं कि यह पुस्तकों का एक लंबा संग्रह है।
लाइब्रेरियन पुनरावृत्त की तरह होगा। वह किसी भी समय किसी विशिष्ट पुस्तक को इंगित कर सकता है। वह उस स्थान पर पुस्तक को सम्मिलित / हटा / संशोधित / संशोधित कर सकता है जहाँ वह इंगित कर रहा है। वह कहते हैं, क्रम में, हर किताब में हर बार जब आप चिल्लाते हैं "अगला!" उसे। तो, आप सामान्य रूप से उससे पूछेंगे: "अगला है?", और वह "हाँ" कहेगा, जिसे आप "अगला" कहते हैं। और वह अगली पुस्तक की ओर इशारा करेगा। वह यह भी जानता है कि कब वह शेल्फ के अंत तक पहुँच गया है, ताकि जब आप पूछें: "अगला है?" वह कहेगा "नहीं"।
मुझे पता है कि यह थोड़ा मूर्खतापूर्ण है, लेकिन मुझे उम्मीद है कि इससे मदद मिलेगी।
कॉलिनड और सीकर जवाब के अलावा ।
सरल शब्दों में, Iterable और Iterator जावा के संग्रह ढांचे में प्रदान किए गए दोनों इंटरफेस हैं।
iterable
एक वर्ग को Iterable इंटरफ़ेस लागू करना पड़ता है अगर वह अपने संग्रह पर पुनरावृति करने के लिए प्रत्येक लूप चाहता है । हालाँकि, फॉर-लूप का उपयोग केवल आगे की दिशा में संग्रह के माध्यम से साइकिल चलाने के लिए किया जा सकता है और आप इस संग्रह में तत्वों को संशोधित करने में सक्षम नहीं होंगे । लेकिन, यदि आप सभी चाहते हैं कि तत्वों के डेटा को पढ़ना है, तो यह बहुत सरल है और जावा लैम्ब्डा अभिव्यक्ति के लिए धन्यवाद यह अक्सर एक लाइनर है। उदाहरण के लिए:
iterableElements.forEach (x -> System.out.println(x) );
इटरेटर
यह इंटरफ़ेस आपको इसके तत्वों को प्राप्त करने और निकालने के लिए संग्रह पर पुनरावृति करने में सक्षम बनाता है। संग्रह कक्षाओं में से प्रत्येक एक पुनरावृत्ति () विधि प्रदान करता है जो संग्रह के प्रारंभ में एक पुनरावृत्ति देता है। Iterable पर इस इंटरफ़ेस का लाभ यह है कि इस इंटरफ़ेस के साथ आप संग्रह में तत्वों को जोड़ सकते हैं, संशोधित कर सकते हैं या हटा सकते हैं । लेकिन, एक्सेस करने वाले तत्वों को पुनरावृत्ति की तुलना में थोड़ा अधिक कोड की आवश्यकता होती है। उदाहरण के लिए:
for (Iterator i = c.iterator(); i.hasNext(); ) {
Element e = i.next(); //Get the element
System.out.println(e); //access or modify the element
}
सूत्रों का कहना है:
Iterable
जावा में प्रत्येक लूप के लिए उपयोग करने के लिए पेश किया गया था
public interface Collection<E> extends Iterable<E>
Iterator
वह वर्ग है जो एक से अधिक पुनरावृति का प्रबंधन करता है Iterable
। यह उस स्थिति को बनाए रखता है जहां हम वर्तमान पुनरावृत्ति में हैं, और जानते हैं कि अगला तत्व क्या है और इसे कैसे प्राप्त किया जाए।
Iterable
यहinteral
याexternal
पुनरावृत्ति या उनमें से किसी के लिए संभव है?