التعداد مقابل إيتاتور
 

هناك العديد من بنيات البيانات التي تعمل كمجموعات في Java مثل Vectors وجداول Hash والفئات التي تقوم بتنفيذ Java Collections Framework (مثل HashMap و HashSet و ArrayList و TreeSet و TreeMap و LinkedList و LinkedHashMap و LinkedHashSet). هناك طرق عديدة للتكرار من خلال العناصر الفردية للكائنات في Java. يوفر Java واجهتين لتسهيل هذه المهمة. يعد التعداد و Iterator اثنين من الواجهات الموجودة في حزمة java.util التي توفر وظائف للتعداد من خلال تسلسلات أو كائنات مع مجموعة من العناصر. تم تقديم العداد في JDK 1.0 و Iterator الذي تم تقديمه في JDK 1.2 يكرر عمليا العداد (ضمن إطار المجموعات).

ما هو التعداد؟

التعداد هو واجهة عامة في Java ، تم تقديمها في JDK 1.0 ، والتي توفر القدرة على التعداد من خلال تسلسل العناصر. وجدت تحت حزمة java.util. عندما يتم تطبيق واجهة التعداد بواسطة كائن ، يمكن لهذا الكائن إنشاء سلسلة من العناصر. واجهة التعداد له طريقتان. ستختبر الطريقة MoreElements () ما إذا كان هذا التعداد يحتوي على المزيد من العناصر وإرجاع nextElement () العنصر التالي في التسلسل (إذا كان هناك واحد آخر على الأقل). بمعنى آخر ، عن طريق استدعاء nextElement () على التوالي ، يمكن للمبرمج الوصول إلى العناصر الفردية في السلسلة. على سبيل المثال ، لطباعة جميع العناصر في Vector v1 باستخدام Enumerator ، يمكن استخدام مقتطف الشفرة التالي.

التعداد e = v1.elements ()؛

بينما (e.hasMoreLements ()) {

System.out.println (e.nextElement ())؛

}

يمكن أيضًا استخدام العداد لتحديد دفق الإدخال إلى كائنات SequenceInputStream.

ما هو التكرار؟

Iterator هي واجهة عامة في حزمة Java.util ، والتي تسمح بالتكرار من خلال عناصر كائنات المجموعات التي تنفذ إطار المجموعات (مثل ArrayList ، LinkedList ، إلخ). تم تقديم هذا في JDK 1.2 واستبدل العداد في إطار Java Collections Framework. إيتاتور لديه ثلاث طرق. الطريقة hasNext () تختبر ما إذا كانت هناك عناصر متبقية في المجموعة أما الطريقة التالية () فتُرجع العنصر التالي في السلسلة. يمكن استخدام طريقة remove () لإزالة العنصر الحالي من المجموعة الأساسية. على سبيل المثال ، لطباعة جميع العناصر في Vector v1 باستخدام Iterator ، يمكن استخدام مقتطف الشفرة التالي.

تكرار I = v1.elements () ؛

بينما (i.hasNext ()) {

System.out.println (e.next ())؛

}

ما هو الفرق بين التعداد والتكرار؟

على الرغم من أن التعداد و Iterator هما من الواجهات الموجودة في حزمة java.util ، والتي تسمح بالتكرار / التعداد من خلال عناصر سلسلة ، إلا أن لديهم اختلافاتهما. في الواقع ، فإن Iterator ، الذي تم تقديمه بعد التعداد ، يحل محل التعداد في إطار مجموعات Java. على عكس التعداد ، فإن Iterator آمن من الفشل. هذا يعني أنه لا يُسمح بالتعديلات المتزامنة (على المجموعة الأساسية) عند استخدام Iterator. هذا مفيد للغاية في بيئات متعددة الخيوط حيث يوجد دائمًا خطر حدوث تعديلات متزامنة. في حالة حدوث تعديل متزامن ، فإن كائن Iterator سيرمي ConcurrentModificationException. لدى Iterator أسماء طرق أقصر مقارنةً بالعداد. علاوة على ذلك ، فإن أداة التكرار لديها وظائف إضافية تتمثل في حذف العناصر أثناء التكرار (وهذا غير ممكن باستخدام العداد). لذلك ، إذا كانت هناك حاجة لإزالة عناصر من المجموعة ، فإن Iterator هو الخيار الوحيد الذي يمكن النظر فيه.