أهلاً! في درس اليوم، سنتحدث عن Java Iterator. تخيل أنك تذهب إلى المكتبة، وتريد العثور على كتاب معين. كيف تقوم بذلك؟ إذا كان غير خيالي، فهناك نظام ديوي العشري. إذا كان خياليًا، فسيتم ترتيبهم أبجديًا حسب اسم العائلة. مهما كان ما تبحث عنه، في مرحلة ما، عليك مراجعة الكتب واحدًا تلو الآخر حتى تجد ما تبحث عنه. عندما يكون لديك مجموعة من الأشياء في Java، سواء كانت مخزنة في Array أو ArrayList أو Queue أو List ، كيف يمكنك العثور على قيمة معينة؟ في مرحلة ما، عليك أن تمر بكل عنصر على حدة. هذا هو الغرض من مكرر Java.
![كيفية استخدام Java Iterator: برنامج تعليمي موجز - 1](https://cdn.codegym.cc/images/article/892e5196-b8b8-471b-a375-818b439b9d75/800.jpeg)
ما هو التكرار في جافا
ما هو المكرر في جافا؟ إنها طريقة للنظر إلى كل عنصر في المجموعة. ونعني بالجمع أي شيء في فئة التجميع . هذا يتضمن:- ArrayList
- HashSet
- LinkedHashSet
- قائمة مرتبطة
- طابور الأولوية
- المتجه
- واشياء أخرى عديدة…
لماذا لا يجب عليك استخدام For Loops كمكرر في Java
إحدى الطرق الأولى التي يتم بها تعليم الجميع كيفية التكرار من خلال مجموعة في Java هي التكرار الحلقي. تبدو هكذا:class Main {
public static void main(String[] args) {
int exampleArray[] = new int[10];
//fill array with data
for(int x = 0; x < exampleArray.length; x++) {
System.out.println("Content of element " + x + "is: " + exampleArray[x]);
}
}
}
سيكون الإخراج قائمة نصها:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
هذا له استخداماته، ولكن ماذا يحدث إذا لم تقم المجموعة بتخزين العناصر في نظام قائم على الفهرس؟ على سبيل المثال، ليس لدى Set s طلب بشكل طبيعي. لذلك يُنصح بالتوقف عن ممارسة استخدام حلقة for كمكرر في Java والتدرب على استخدام فئة Iterator<E> بدلاً من ذلك. فيما يلي بعض الأمثلة على مكررات Java.
كيفية استخدام Iterator في جافا
فيما يلي بعض الأمثلة حول كيفية استخدام المكرر في Java. عند استخدام فئة التكرار، هناك ثلاث طرق لاجتياز مجموعة. يمكنك استخدام حلقة while() ، وحلقة for() ، وحلقة forEach() . لاحظ أن حلقة for هذه تختلف عن تلك التي تحدثنا عنها من قبل. فيما يلي ثلاثة أمثلة مختلفة لمكررات Java. أولاً، لنقم بإعداد المجموعة للتكرار.import java.util.*; // imports ArrayList, Collection and Iterator
class Main {
public static void main(String[] args) {
Collection<String> example = new ArrayList<String>();
example.add("Item 1");
example.add("Item 2");
example.add("Item 3");
example.add("Item 4");
}
}
هذه مجموعة بسيطة مكونة من قائمة ArrayList والتي قمنا بتحميل أربعة عناصر إليها. الآن دعونا نلقي نظرة على الطرق الثلاث لاستخدام فئة Iterator لاجتياز ArrayList .
حائط اللوب
Iterator<String> iterator = example.iterator();
while (iterator.hasNext()) {
System.out.println("Element Value= " + iterator.next());
}
تستخدم حلقة while() هذه الطريقة المنطقية .hasNext() لفئة Iterator للتحقق مما إذا كان هناك عنصر مستقبلي. إذا كان الشرط صحيحا، فإنه يستمر. إذا عادت كخطأ، تنتهي الحلقة. الجزء الأساسي هنا هو أن كلا من التابعين .hasNext() و .next() يقومان بإجراء فحص أولي للعنصر الأول. إذا كانت المجموعة فارغة ولا يوجد عنصر أول، فستُرجع الطريقة خطأ للتابع .hasNext () وستطرح NoSuchElementException للتابع .next() .
لحلقة
for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
System.out.println("Element Value= " + iterator.next());
}
يبدو هذا وكأنه حلقة for أكثر تقليدية. ويستخدم أسلوب .hasNext() كجزء فحص الحالة وتغييرها. التهيئة هي استدعاء التكرار.
ل: كل حلقة
for (String s : example) {
System.out.println("Element Value= " + s);
}
For :كل حلقة هي حلقة for، ولكن إذا كنت لا تعرف كيفية قراءتها، فقد يكون الأمر مربكًا بعض الشيء. بناء جملة For:Each حلقة هو لـ (data_typevariateName : CollectionName){body} . هذا من أجل: كل حلقة لها بعض العيوب. أولاً، يمكنها اجتياز المجموعة في اتجاه واحد فقط. ثانيا، عليك أن تتكرر من خلال كل عنصر. لا يمكنك تخطي أي منهم. ولكن باعتباره مكررًا مناسبًا للقائمة في Java، فهو الخيار الأفضل. على الجانب الإيجابي، من السهل جدًا قراءة for:each حلقة، وبمجرد أن تعرفها، يصبح من الصعب أن تخطئ. إذا كنت تتساءل عن مخرجات حلقات التكرار الثلاثة، فهي جميعها متماثلة:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4
كيفية استخدام Iterator في Java للخرائط
تعد الخرائط طريقة شائعة لتخزين البيانات، ولكن نظرًا لأنها لا تعمل على توسيع المجموعة ، فلا يمكنك استخدام التكرارات السابقة لاجتياز الخريطة مباشرة. إذًا كيف يمكنك استخدام مكرر في Java لتصفح Maps و HashMap s؟ هناك أربع طرق جيدة لتكرار خرائط Java. سنقوم بتغطيتها بشكل فردي. أولاً، لنقم بتحميل خريطة بسلسلة من القيم.import java.util.*; //imports Map and HashMap
class Main {
public static void main(String[] args) {
Map<String, String> example = new HashMap<String, String>();
example.put("alpha", "one");
example.put("beta", "two");
example.put("gamma", "three");
}
}
طريقة Java Hashmap Iterator: forEach(action)
example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
تستخدم هذه الطريقة تعبير لامدا للتكرار. عامل تشغيل lambda هو طريقة forEach() ، ويقوم الجسم بطباعة القيم. يستخدم هذا عامل تشغيل متعدد المعلمات. هذه هي الطريقة الأسرع والأنظف لمكرر الخريطة في Java 8.
طريقة مكرر Java Hashmap: لـ: كل حلقة ().
for (Map.Entry<String, String> iterate : example.entrySet()) {
System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
يستخدم هذا بناء الجملة For:Each لاستدعاء أسلوب الإدخال () لإرجاع مجموعة تحتوي على المفتاح والقيمة كعناصر لها. بالإضافة إلى ذلك، عند استخدام الأسلوب .Entry() ، تكون الكائنات صحيحة فقط أثناء حدوث هذا التكرار.
طريقة Java Hashmap Iterator: Map.Entry<k, v>
Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> element = iterator.next();
System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
تقوم هذه الطريقة مرة أخرى بتحويل الخريطة إلى مجموعة لاستخدام مكرر المجموعات والأساليب. بالنسبة لطرق التكرار الثلاث هذه، تبدو العودة كما يلي:
Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
System.out.println("Key: " + key);
}
for (String value : example.values()) {
System.out.println("Value: " + value);
}
هذا يقوم بإرجاع العناصر بطريقة مختلفة. سيُرجع أولاً جميع المفاتيح بالترتيب، ثم يُرجع جميع القيم:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
GO TO FULL VERSION