আমি জাভাতে নতুন এবং আমি পুনরাবৃত্তকারী এবং পুনরাবৃত্তের সাথে সত্যিই বিভ্রান্ত। কেউ কি আমাকে বুঝিয়ে কিছু উদাহরণ দিতে পারেন?
আমি জাভাতে নতুন এবং আমি পুনরাবৃত্তকারী এবং পুনরাবৃত্তের সাথে সত্যিই বিভ্রান্ত। কেউ কি আমাকে বুঝিয়ে কিছু উদাহরণ দিতে পারেন?
উত্তর:
একটি 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();
}
জাভাদোক দেখুন ।
আপনাকে আরও বুঝতে সাহায্য করার জন্য আমি উদাহরণ হিসাবে উদাহরণস্বরূপ অ্যারেলিস্ট সম্পর্কে প্রশ্নের উত্তর দেব ...
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. ... }
'পরিলক্ষিত <- সংগ্রহ <- তালিকা <- অ্যারেলিস্ট "
। এবং লক্ষণীয়, সংগ্রহ এবং তালিকা কেবল বিমূর্ত পদ্ধতি 'পুনরাবৃত্তকারী ()' ঘোষণা করে এবং অ্যারেলিস্ট একাই এটি প্রয়োগ করে।
'পুনরাবৃত্তকারী' () পদ্ধতিটি 'Itr' শ্রেণীর একটি অবজেক্ট প্রদান করে যা '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
আইটেবল ইন্টারফেস প্রয়োগ করা কোনও বস্তুকে "ফোরচ" স্টেটমেন্টের লক্ষ্য হতে দেয়।
class SomeClass implements Iterable<String> {}
class Main
{
public void method()
{
SomeClass someClass = new SomeClass();
.....
for(String s : someClass) {
//do something
}
}
}
Iterator একটি ইন্টারফেস, যা উপাদানগুলির উপর পুনরাবৃত্তি জন্য বাস্তবায়ন আছে। Iterable একটি ইন্টারফেস যা Iterator সরবরাহ করে।
সর্বাধিক গুরুত্বপূর্ণ বিবেচনাটি হ'ল যে প্রশ্নে থাকা আইটেমটি একাধিকবার ট্র্যাভার করতে সক্ষম হওয়া উচিত। এটি কারণ আপনি সর্বদা পুনরায় পুনরুক্তি () কে কল করে একটি আইটেবল রিওয়াইন্ড করতে পারেন তবে কোনও আইট্রেটার রিওয়াইন্ড করার কোনও উপায় নেই।
এখানে ব্যাখ্যা হিসাবে , " Iteable " foreach
লুপ ব্যবহার করতে সক্ষম হতে চালু করা হয়েছিল । আইটেবল ইন্টারফেস প্রয়োগকারী একটি শ্রেণি পুনরাবৃত্তি হতে পারে।
Iterator একটি শ্রেণিবদ্ধ যা একটি Iteable উপর পুনরাবৃত্তি পরিচালনা করে । এটি বর্তমানের পুনরাবৃত্তিতে আমরা কোথায় রয়েছি তার একটি অবস্থা বজায় রাখে এবং পরবর্তী উপাদানটি কী এবং এটি কীভাবে পাওয়া যায় তা জানে।
10 টি আপেল থাকার একটি উদাহরণ বিবেচনা করুন। যখন এটি ইটারেবল প্রয়োগ করে, এটি প্রতিটি আপেলকে 1 থেকে 10 পর্যন্ত বাক্সে রাখার মতো এবং পুনরুদ্ধার করতে ব্যবহৃত একটি পুনরাবৃত্তিকে ফিরিয়ে দেওয়ার মতো।
পুনরুক্তি কার্যকর করে, আমরা যে কোনও আপেল, পরের বাক্সগুলিতে অ্যাপল পেতে পারি etc.
সুতরাং পুনরাবৃত্তির প্রয়োগকারী একটি উপাদানকে তার উপাদানগুলি নেভিগেট করতে দেয় যদিও নেভিগেট করতে গেলে, পুনরুক্তি প্রয়োগ করতে হবে।
প্রশ্ন: Iteable এবং Iterator মধ্যে পার্থক্য?
উত্তর:
পুনরাবৃত্তিযোগ্য: এটি forEach লুপ সম্পর্কিত
পুনরুক্তি সংগ্রহের সাথে সম্পর্কিত
ForEach লুপ শ্যুবলের লক্ষ্য উপাদানটি পুনরাবৃত্ত হতে পারে।
সংগ্রহ থেকে এক এক করে অবজেক্টটি পেতে আমরা আইট্রেটার ব্যবহার করতে পারি
Java.ḷang প্যাকেজে উপস্থিত অপ্রয়োজনীয়
উপস্থিত Iterator উপস্থিত java.util প্যাকেজের উপস্থিতি
কেবলমাত্র একটি পদ্ধতি পুনরুক্তি () রয়েছে
পুনরাবৃত্তকারী রয়েছে তিনটি পদ্ধতির রয়েছে নেক্সট (), পরবর্তী (), সরান ()
1.5 সংস্করণে
উপস্থাপিত হয়েছে 1.2 সংস্করণে পরিচিত
মূলত বলতে গেলে উভয়ই একে অপরের সাথে খুব জড়িত।
আইট্রেটরকে একটি ইন্টারফেস হিসাবে বিবেচনা করুন যা আমাদের কিছু অপরিজ্ঞাত পদ্ধতির মতো হ্যাশেক্সট (), পরবর্তী () এবং মুছে ফেলা () মুছে ফেলার সাহায্যে সংগ্রহের মধ্য দিয়ে ট্র্যাভার করতে সহায়তা করে (
ফ্লিপ দিকে, আইটেবল আরেকটি ইন্টারফেস, যা কোনও শ্রেণি দ্বারা প্রয়োগ করা হলে শ্রেণিটিকে Iteable হতে বাধ্য করে এবং প্রতিটি নির্মাণের জন্য লক্ষ্য। এটির কেবলমাত্র একটি পদ্ধতি রয়েছে যা পুনরায় আইট্রেটর () যা আইট্রেটার ইন্টারফেস থেকেই আসে।
যখন কোনও সংগ্রহ পুনরাবৃত্ত হয়, তখন এটি একটি পুনরুক্তি ব্যবহার করে পুনরাবৃত্তি করা যেতে পারে।
বোঝার জন্য এই দেখুন:
ITERABLE: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java
আইটিইটিএটার http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java
আমি জানি এটি একটি পুরানো প্রশ্ন, তবে যে কেউ এই প্রশ্নটি নিয়ে একই প্রশ্নে আটকে আছে এবং যিনি সমস্ত পরিভাষায় অভিভূত হতে পারেন তার জন্য, পুনরাবৃত্ত এবং পুনরুক্তির মধ্যে এই পার্থক্য বুঝতে আপনাকে সহায়তা করার জন্য এখানে একটি ভাল, সাধারণ উপমা দেওয়া হয়েছে:
একটি পাবলিক লাইব্রেরি চিন্তা করুন। পুরানো স্কুল. কাগজের বই নিয়ে। হ্যাঁ, এ জাতীয় গ্রন্থাগার।
বই পূর্ণ শেল্ফ একটি পুনরাবৃত্তিযোগ্য মত হবে। আপনি বালুচর বইয়ের দীর্ঘ লাইন দেখতে পারেন। আপনি কয়টি জানেন না, তবে আপনি দেখতে পাচ্ছেন যে এটি বইয়ের দীর্ঘ সংগ্রহ।
লাইব্রেরিয়ানটি পুনরাবৃত্তকারীর মতো হবে। তিনি যে কোনও মুহুর্তে একটি নির্দিষ্ট বইয়ের দিকে নির্দেশ করতে পারেন। তিনি যে স্থানে ইশারা করছেন সেখানে বই সন্নিবেশ / অপসারণ / সংশোধন / পড়তে পারেন। তিনি ক্রমানুসারে প্রতিটি বইয়ের প্রতি নির্দেশ দিয়েছেন প্রতিবার যখন আপনি "পরের!" তাকে. সুতরাং, আপনি সাধারণত তাকে জিজ্ঞাসা করতেন: "এর পরেরটি আছে?", এবং তিনি "হ্যাঁ" বলবেন, যার কাছে আপনি "পরের!" এবং সে পরের বইটিতে নির্দেশ করবে point তিনি শেল্ফের শেষে কখন পৌঁছেছেন তাও তিনি জানেন, যাতে আপনি যখন জিজ্ঞাসা করবেন: "পরেরটি আছে?" সে "না" বলবে।
আমি জানি এটি কিছুটা নিরীহ, তবে আমি আশা করি এটি সাহায্য করবে।
কলিনডি এবং সিকার উত্তরগুলি ছাড়াও ।
সহজ কথায়, Iteable এবং Iterator উভয় জাভা সংগ্রহ ফ্রেমওয়ার্ক সরবরাহ করা ইন্টারফেস হয়।
Iterable
কোনও শ্রেণীর জন্য এটি সংগ্রহের মাধ্যমে পুনরাবৃত্তি করার জন্য প্রতিটি লুপের জন্য চাইলে Iteable ইন্টারফেস প্রয়োগ করতে হবে । যাইহোক, প্রতিটি লুপটি কেবল সামনের দিকের দিকে সংগ্রহের মাধ্যমে চক্র করতে ব্যবহৃত হতে পারে এবং আপনি এই সংগ্রহে থাকা উপাদানগুলিকে সংশোধন করতে পারবেন না । তবে, যদি আপনি চান সমস্ত উপাদান উপাদানগুলি পড়তে হয়, তবে এটি খুব সহজ এবং জাভা ল্যাম্বডা এক্সপ্রেশনটির জন্য ধন্যবাদ এটি প্রায়শই একটি লাইনার। উদাহরণ স্বরূপ:
iterableElements.forEach (x -> System.out.println(x) );
iterator
এই ইন্টারফেস আপনাকে সংগ্রহের মাধ্যমে পুনরাবৃত্তি করতে, এর উপাদানগুলি গ্রহণ এবং অপসারণ করতে সক্ষম করে। সংগ্রহের প্রতিটি ক্লাস একটি পুনরুক্তি () পদ্ধতি সরবরাহ করে যা সংগ্রহের শুরুতে একটি পুনরাবৃত্তিকে ফেরত দেয়। এই ইন্টারফেসটির মাধ্যমে পুনরাবৃত্তিযোগ্য হওয়ার উপকারটি হ'ল এই ইন্টারফেসের সাহায্যে আপনি কোনও সংকলনে উপাদান যুক্ত করতে, সংশোধন করতে বা মুছতে পারেন । তবে, উপাদানগুলিতে অ্যাক্সেস করার জন্য পুনরাবৃত্ত হওয়ার চেয়ে কিছুটা বেশি কোড দরকার। উদাহরণ স্বরূপ:
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
তাদের কোন পুনরুক্তিকারীর বা এটা সম্ভব কিভাবে?