Toshkent axborot texnalogiyalar universteti
Download 17.27 Kb.
|
1 2
Bog'liqShavkatov Dt arxitekturas
ListIterator sinfi collection nomli to'plam ob'ektiga bog'langan iteratorni ifodalaydi. __next__() metodi to'plamning har bir elementini qaytaradi va indeksni oshiradi. SetIterator sinfi esa collection nomli to'plam ob'ektiga bog'langan iteratorni ifodalaydi, lekin elementlarni set yordamida saqlayadi va har bir qadamda bir elementni to'plamdan olib tashlaydi.
Bu sinflar orqali, bir list yoki to'plam ob'ektiga iterator sifatida murojaat qilish imkoniyatiga ega bo'lasiz. Misol uchun: my_list = [1, 2, 3, 4, 5] list_iterator = ListIterator(my_list) for element in list_iterator: print(element) my_set = {10, 20, 30, 40, 50} set_iterator = SetIterator(my_set) for element in set_iterator: print(element) Bu kodlar orqali my_list va my_set ob'ektlaridan elementlarni iterator orqali olish imkoniyatiga ega bo'lasiz. 1. Iteratorlar uchun umumiy interfeys yarating. Kerakli minimal - bu to'plamning keyingi elementini olish operatsiyasi. Lekin qulaylik uchun siz boshqa narsani taqdim etishingiz mumkin. Masalan, oldingi elementni olish usullari, joriy pozitsiya, o'tishning oxirini tekshirish va boshqalar. java public interface Collection Iterator void add(T item); // to'plamga element qo'shish void remove(T item); // to'plamdan elementni olib tashlash boolean contains(T item); // to'plamda element mavjudligini tekshirish int size(); // to'plamdagi elementlar sonini olish } Bu interfeys umumiy Iterator “Iterator()” usuliga qo'shimcha ravishda to'plam bilan ishlashning boshqa usullarini to'plam interfeysida aniqlash mumkin, masalan: - add(T item) - to'plamga element qo'shadi. - remove(T item) - to'plamdan elementni olib tashlaydi. - contains(T item) - to'plamda element mavjudligini tekshiradi. - size() - to'plamdagi elementlar sonini qaytaradi. Ushbu usullarni amalga oshirish muayyan to'plamga bog'liq. Masalan, “add()” usuli o‘zgarmas to‘plamda qo‘llab-quvvatlanmasligi mumkin va “contains()” usuli murakkab elementlarni qidirish mantiqini talab qilishi mumkin. 2. Shablon bilan o'tmoqchi bo'lgan to'plamlar uchun maxsus iterator sinflarini yarating. Iterator faqat bitta to'plam ob'ektiga bog'langan bo'lishi kerak. Odatda bu munosabatlar konstruktor orqali o'rnatiladi. Java tilida to'plamlar uchun maxsus iteratorlarni amalga oshirishga misol: java // Iterator interfeysi public interface Iterator boolean hasNext(); // keyingi element mavjudligini tekshirish T next(); // keyingi elementni olish } // Ro'yxat uchun maxsus iterator public class ListIterator private List private int position; // joriy iterator pozitsiyasi public ListIterator(List this.list = list; this.position = 0; } public boolean hasNext() { return position < list.size(); } public T next() { T element = list.get(position); position++; return element; } } // Massiv uchun maxsus iterator public class ArrayIterator private T[] array; // massiv ob'ektiga havola private int position; // joriy iterator pozitsiyasi public ArrayIterator(T[] array) { this.array = array; this.position = 0; } public boolean hasNext() { return position < array.length; } public T next() { T element = array[position]; position++; return element; } } Bu sinflar Iterator Shunday qilib, mijoz kodi Iterator 3. Maxsus yig'ish sinflarida iterator olish usullarini qo'llash. Ular berilgan to'plam turi bilan ishlashga qodir bo'lgan sinfning yangi iteratorini yaratishlari kerak. To'plam o'z ob'ektiga havolani iterator konstruktoriga o'tkazishi kerak. Maxsus yig'ish sinflari ma'lum bir iterator ob'ektini qaytaradigan iterator oluvchini amalga oshirishi kerak. Ushbu usul berilgan to'plam turida ishlay oladigan yangi iterator yaratishi va uni to'plamning o'ziga havola qilishi kerak. Massiv sinfida (Array) iterator getter usulini amalga oshirishga misol: javascript class ArrayIterator { constructor(array) { this.array = array; this.index = 0; } hasNext() { return this.index < this.array.length; } next() { return this.array[this.index++]; } } class MyArray { constructor() { this.array = []; } add(item) { this.array.push(item); } [Symbol.iterator]() { return new ArrayIterator(this.array); } } const myArray = new MyArray(); myArray.add(1); myArray.add(2); myArray.add(3); const iterator = myArray[Symbol.iterator](); while (iterator.hasNext()) { console.log(iterator.next()); } Ushbu misolda "ArrayIterator" klassi umumiy iterator interfeysini amalga oshiradi va "MyArray" klassi ma'lum bir to'plamni ifodalaydi. Symbol.iterator() usuli joriy massivda ishlaydigan yangi ArrayIterator obyektini qaytaradi. 4. Mijoz kodi va yig'ish sinflarida hech qanday element o'tish kodi qolmasligi kerak. Mijoz har safar uning elementlarini takrorlashi kerak bo'lganda yig'ish ob'ektidan yangi iteratorni olishi kerak. ArrayList to'plamidan foydalangan holda Java tilida Iterator shablonini amalga oshirishga misol: java import java.util.ArrayList; import java.util.Iterator; public class MyCollection implements Iterable private ArrayList public void addItem(String item) { items.add(item); } @Override public Iterator return new MyIterator(items); } private class MyIterator implements Iterator private ArrayList private int position; public MyIterator(ArrayList this.items = items; this.position = 0; } @Override public boolean hasNext() { return position < items.size(); } @Override public String next() { String item = items.get(position); position++; return item; } } } Ushbu misolda "MyCollection" "Iterator()" usulini amalga oshirishni talab qiluvchi "Iterable" interfeysini qo'llaydi. “Iterator()” usuli “Iterator” interfeysini amalga oshiradigan “MyIterator” obyektini qaytaradi. "MyIterator" iteratori elementlarni saqlash uchun "ArrayList" to'plamidan foydalanadi va ikkita usul mavjud: "hasNext()" va "keyingi()'. hasNext() usuli keyingi element mavjudligini tekshiradi va keyingi() usuli to`plamdagi keyingi elementni qaytaradi. Mijoz kodida to'plam elementlarini takrorlash uchun biz "iterator()" usulini ichkarida chaqiradigan "for-each" tsiklidan foydalanishimiz mumkin: java MyCollection collection = new MyCollection(); collection.addItem("item 1"); collection.addItem("item 2"); collection.addItem("item 3"); for (String item : collection) { System.out.println(item); } To'plam elementlarini takrorlash uchun har safar "for-each" dan foydalansak, biz to'plam ob'ektidan yangi iteratorni olamiz. Download 17.27 Kb. Do'stlaringiz bilan baham: |
1 2
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling