هيكل نمط التكرار:
يمكن للنمط الفرعي التكراري الوصول إلى عنصر مجمعة بشكل متتابع دون تعريض التمثيل الداخلي المجمعة.
يمكن تقسيم التكرار إلى تكرار خارجي وتكرار داخلي .
التكرار الخارجي: مناسب لتجميع الصندوق الأبيض (تجميع الصندوق الأبيض هو تزويد العالم الخارجي بتجميع يصل إلى واجهة العنصر الداخلي). نظرًا لأن المنطق التكراري يتم توفيره بواسطة كائن التجميع نفسه ، فإن هذا الدورة الفرعية للتكرار الخارجي غالبًا ما تحافظ فقط على موضع المؤشر للتكرار. لذلك ، فإن الدورة الفرعية التكرارية المحددة هي فئة خارجية ، ويقبل مُنشئها كائنًا إجماليًا محددًا ، بحيث يمكنه استدعاء المنطق التكراري للكائن الإجمالي.
INNER ITERATOR: مناسب لتجميع الصندوق الأسود (لا يوفر تجميع الصندوق الأسود واجهة للخارج لاجتياز كائنات العناصر الخاصة به). نظرًا لأنه لا يمكن الوصول إلى كائنات العناصر التي تم جمعها بواسطة Black Box إلا من قبل الأعضاء الداخليين المجمعة ، يمكن أن يكون التكرار الداخلي فقط فئة فرعية للعضو داخل المجموع.
مظاهرة بسيطة:
حزمة test.edu.inter ؛ الواجهة العامة iteratorobj { / *** الانتقال إلى العنصر الأول* / public void first () ؛ / *** الانتقال إلى العنصر التالي*/ boolean public hasnextItem () ؛ / *** إرجاع العنصر الحالي*/ الكائن العام CurrentItem () ؛ } package test.edu.inter ؛ مجموعة بيانات الواجهة العامة {public iteratorobj getiterator () ؛ } package test.edu.inter ؛ الطبقة العامة iterator1 تنفذ iteratorobj {private dataObj set ؛ حجم الباحث الخاص ؛ مؤشر int الخاص = 0 ؛ public iterator1 (dataObj set) {this.set = set ؛ this.size = set.getSize () ؛ } Override public void first () {// todo method tuto method this.index = 0 ؛ } Override public boolean hasnextItem () {if (index <size) {return true ؛ } إرجاع خطأ ؛ } Override public Object CurrentItem () {Object ob = set.getItem (index) ؛ if (index <size) {index ++ ؛ } إرجاع OB ؛ }} package test.edu.Inter ؛ DataObj الفئة العامة تنفذ مجموعة البيانات {private object [] objarray = null ؛ / *** كائن إجمالي وارد*/ DataObj (Object [] objarray) {this.objarray = objarray ؛ } Override Public IteratorObj getiterator () {return new iterator1 (this) ؛ } الكائن العام getItem (int index) {return objarray [index] ؛ } public int getSize () {return objarray.length ؛ }} package test.edu.Inter ؛ عميل الفئة العامة { / ** * param args * / public static void main (string [] args) {// todo method method method method string [] str = {"12312" ، "dasda" ، "dasd" ، "12D" ، "ASD"} ؛ DataObj AO = New DataObj (STR) ؛ iteratorobj io = ao.getiterator () ؛ بينما (io.hasnextItem ()) {system.out.println (io.currentItem ()) ؛ }}} نتائج التشغيل:
12312 داسدا داس 12D ASD
توسيع المحتوى: التطبيقات في تجميع Java
يتم توفير طريقة المصنع ITerator () في واجهة java.util.collection لإرجاع كائن نوع التكرار. النوع الفرعي لواجهة التجميع ، فئة الأعضاء الداخلية ITR تنفذ واجهة Iterator. لذا فإن ITR هي فئة فرعية تكرارية جوهرية ، ولكن القائمة الملخصية توفر أيضًا طريقة اجتيازها الخاصة ، لذلك فهي ليست عبارة عن تجميع صناديق أسود ، ولكن تجميع الصندوق الأبيض. الرمز كما يلي:
استيراد java.util.iterator ؛ الواجهة العامة ITR تمتد iterator {// مؤشر المستخدمة عند استدعاء الطريقة التالية () مرة أخرى int int = 0 ؛ // مؤشر المستخدم في آخر مكالمة LASTRET = -1 ؛ int equiventModCount = modCount ؛ boolean public hasnext () {return cursor! = size () ؛ } الكائن العام next () {try {object next = get (cursor) ؛ checkForComodification () ؛ LASTRET = CURSOR ++ ؛ العودة بعد ذلك ؛ } catch (indexoutofBoundSexception e) {checkForComodification () ؛ رمي nosuchelementException () ؛ }} // حذف العنصر الأخير الذي تم اجتيازه ، يمكن لطريقة إزالة () فقط حذف الفراغ العام الأخير الذي تم اجتيازه () {if (LASTRET ==-1) رمي جديد alficalstateException () ؛ checkForComodification () ؛ Try {AbstractList.This.Remove (Lastret) ؛ إذا (lastret <cursor) Cursor-- ؛ lastret = -1 ؛ المتوقع expectModCount = modCount ؛ } catch (indexoutofBoundSexception e) {رمي جديد convalentModificationException () ؛ }} public void checkForComodification () {if (modCount! = expectedModCount) رمي ConvintModificationexception () ؛ }} المتغيرات والأساليب مثل ModCount ، GET (المؤشر) جميعها مملوكة من قبل فئة القائمة التجريدية ، ويمكن استخدام ITR مباشرة. ستتحقق Checkforcomodification () ما إذا كان المحتوى المجمعة قد تم تعديله مباشرة بواسطة العالم الخارجي (لم يتم تعديله من خلال طريقة إزالة () التي يوفرها المتكرر). إذا تم تجاوز المحتوى الذي تم تجميعه من خلال الكائن الفرعي التكراري وقام بتعديل العام الجديد مباشرة بعد الكائن الفرعي التكراري ، فإن هذه الطريقة ستعمل على الفور على استثناء.
بالإضافة إلى ذلك: توفر فئة Mortclist أيضًا طريقة ListIratorator () ، وإرجاع مثيل Listitr الفئة الذي ينفذ واجهة ListIrator. تقوم واجهة ListiTerator بتنفيذ التكرار الأمامي والتكرار العكسي ، كما توفر طريقة لتعديل محتوى العمود بأمان أثناء عملية التكرار.
الفرق بين التعداد والتكرار: (1) لا يحتوي التعداد على طريقة إزالة (2) يتم تنفيذ التعداد كفئة لم يكشف عن اسمها في طريقة العنصر () في المتجه. لا تدفع مقابل الفشل بسرعة ، أي أثناء عملية التكرار ، يتم تعديل الكائن المجمعة بشكل غير متوقع من قبل العالم الخارجي ، وستستلزم عملية التكرار هذه أي استثناءات على الفور.
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.