التعداد مقابل التكرار
هناك العديد من هياكل البيانات التي تعمل كمجموعات في Java مثل المتجهات وجداول التجزئة والفئات التي تنفذ Java Collections Framework (مثل HashMap و HashSet و ArrayList و TreeSet و TreeMap و LinkedList و LinkedHashMap و LinkedHashSet). هناك طرق عديدة للتكرار من خلال العناصر الفردية للكائنات في Java. توفر Java واجهتين لتسهيل هذه المهمة. التعداد والتكرار هما واجهتان من الواجهات الموجودة في حزمة java.util التي توفر وظائف للتعداد من خلال التسلسلات أو الكائنات مع مجموعة من العناصر. تم تقديم العداد في JDK 1.0 و Iterator الذي تم تقديمه في JDK 1.2 فعليًا يكرر وظيفة العداد (ضمن إطار عمل المجموعات).
ما هو العد؟
Enumeration هي واجهة عامة في Java ، تم تقديمها في JDK 1.0 ، والتي توفر القدرة على التعداد من خلال تسلسل العناصر. تم العثور عليه ضمن حزمة java.util. عندما يتم تنفيذ واجهة التعداد بواسطة كائن ، يمكن لهذا الكائن إنشاء سلسلة من العناصر. واجهة التعداد لها طريقتان. ستختبر الطريقة hasMoreElements () ما إذا كان هذا التعداد يحتوي على المزيد من العناصر ويعيد nextElement () العنصر التالي في التسلسل (إذا كان هناك عنصر آخر على الأقل يجب الانتقال إليه). بمعنى آخر ، من خلال استدعاء nextElement () تباعاً ، يمكن للمبرمج الوصول إلى العناصر الفردية في السلسلة. على سبيل المثال ، لطباعة جميع العناصر في Vector v1 باستخدام Enumerator ، يمكن استخدام مقتطف الكود التالي.
التعداد e=v1.elements () ؛
while (e.hasMoreLements ()) {
System.out.println (e.nextElement ()) ؛
}
يمكن أيضًا استخدام العداد لتحديد تدفق المدخلات إلى كائنات SequenceInputStream.
ما هو التكرار؟
Iterator هي واجهة عامة في حزمة Java.util ، والتي تسمح بالتكرار خلال عناصر كائنات المجموعات التي تنفذ إطار عمل المجموعات (مثل ArrayList و LinkedList وما إلى ذلك). تم تقديم هذا في JDK 1.2 واستبدل العداد في Java Collections Framework. التكرار له ثلاث طرق. تختبر الطريقة hasNext () ما إذا كانت هناك عناصر متبقية في المجموعة وتعيد الطريقة () العنصر التالي في السلسلة. يمكن استخدام طريقة remove () لإزالة العنصر الحالي من المجموعة الأساسية. على سبيل المثال ، لطباعة جميع العناصر في Vector v1 باستخدام Iterator ، يمكن استخدام مقتطف الشفرة التالي.
Iterator i=v1.elements () ؛
بينما (i.hasNext ()) {
System.out.println (e.next ()) ؛
}
ما الفرق بين التعداد والمكرر؟
على الرغم من أن التعداد والتكرار هما من الواجهات الموجودة في حزمة java.util ، والتي تسمح بالتكرار / التعداد من خلال عناصر سلسلة ، إلا أن هناك اختلافات بينهما. في الواقع ، Iterator ، الذي تم تقديمه بعد التعداد ، يستبدل التعداد في إطار عمل مجموعات Java. على عكس التعداد ، فإن التكرار آمن من الفشل. هذا يعني أن التعديلات المتزامنة (على المجموعة الأساسية) غير مسموح بها عند استخدام التكرار. هذا مفيد جدًا في البيئات متعددة الخيوط حيث يوجد دائمًا خطر حدوث تعديلات متزامنة. في حالة حدوث تعديل متزامن ، سيرمي كائن التكرار ConcurrentModificationException. يحتوي التكرار على أسماء طرق أقصر مقارنةً بـ Enumerator. علاوة على ذلك ، يتمتع المكرر بوظيفة إضافية تتمثل في حذف العناصر أثناء التكرار (وهو أمر غير ممكن باستخدام Enumerator).لذلك ، إذا كانت هناك حاجة لإزالة العناصر من المجموعة ، فإن التكرار هو الخيار الوحيد الذي يمكن اعتباره.