Roʻyxatga olish va iterator oʻrtasidagi farq

Roʻyxatga olish va iterator oʻrtasidagi farq
Roʻyxatga olish va iterator oʻrtasidagi farq

Video: Roʻyxatga olish va iterator oʻrtasidagi farq

Video: Roʻyxatga olish va iterator oʻrtasidagi farq
Video: 𝗕𝗜𝗡𝗔𝗡𝗖𝗘 | RO'YXATDAN O'TISH 2024, Noyabr
Anonim

Raqam va Iterator

Java-da Vektorlar, Xesh-jadvallar va Java Collections Framework-ni (masalan, HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap va LinkedHashSet) amalga oshiradigan sinflar kabi to'plam sifatida ishlaydigan ko'plab ma'lumotlar tuzilmalari mavjud. Java-da ob'ektlarning alohida elementlarini takrorlashning ko'plab usullari mavjud. Java ushbu vazifani osonlashtirish uchun ikkita interfeysni taqdim etadi. Enumeration va Iterator - java.util to'plamida joylashgan ikkita interfeys bo'lib, ular ketma-ketliklar yoki elementlar to'plamiga ega ob'ektlar orqali sanab o'tish uchun funksionallikni ta'minlaydi. Enumerator JDK 1 da joriy qilingan.0 va JDK 1.2 da joriy qilingan Iterator hisoblagich funksiyalarini deyarli takrorlaydi (To'plamlar doirasida).

Roʻyxat nima?

Roʻyxatga olish Java tilidagi umumiy interfeys boʻlib, JDK 1.0 da joriy qilingan boʻlib, u elementlar ketma-ketligi orqali sanash imkoniyatini beradi. U java.util paketi ostida joylashgan. Enumeration interfeysi ob'ekt tomonidan amalga oshirilganda, bu ob'ekt elementlar ketma-ketligini yaratishi mumkin. Ro'yxatga olish interfeysi ikkita usulga ega. hasMoreElements() usuli bu roʻyxatda koʻproq elementlar borligini tekshiradi va nextElement() ketma-ketlikdagi keyingi elementni qaytaradi (agar yana kamida bittasi boʻlsa). Boshqacha qilib aytganda, nextElement() ni ketma-ket chaqirish orqali dasturchi seriyadagi alohida elementlarga kirishi mumkin. Masalan, Vektor v1 da barcha elementlarni Enumerator yordamida chop etish uchun quyidagi kod parchasidan foydalanish mumkin.

Raqam e=v1.elements();

While(e.hasMoreLements()){

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

}

Enumerator SequenceInputStream obyektlariga kirish oqimini aniqlash uchun ham ishlatilishi mumkin.

Iterator nima?

Iterator Java.util paketidagi umumiy interfeys boʻlib, Collections ramkasini amalga oshiradigan toʻplamlar obʼyektlari elementlarini (masalan, ArrayList, LinkedList va boshqalar) takrorlash imkonini beradi. Bu JDK 1.2 da joriy qilingan va Java Collections Framework doirasidagi Enumerator o'rnini egallagan. Iterator uchta usulga ega. hasNext() usuli to'plamda qolgan elementlar bor-yo'qligini tekshiradi va next() usuli seriyadagi keyingi elementni qaytaradi. Remove() usuli joriy elementni asosiy to'plamdan olib tashlash uchun ishlatilishi mumkin. Masalan, Vektor v1 da barcha elementlarni Iterator yordamida chop etish uchun quyidagi kod parchasidan foydalanish mumkin.

Iterator i=v1.elements();

While(i.hasNext()){

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

}

Roʻyxatlash va iterator oʻrtasidagi farq nima?

Enumeration va Iterator java.util toʻplamida mavjud boʻlgan ikkita interfeys boʻlib, ular ketma-ketlik elementlarini takrorlash/sanoqlash imkonini beradi, lekin ularning farqlari bor. Haqiqatan ham, sanab o'tishdan keyin kiritilgan Iterator Java Collections doirasidagi sanab o'rnini egallaydi. Ro'yxatga olishdan farqli o'laroq, iterator muvaffaqiyatsizlikka uchramaydi. Bu shuni anglatadiki, Iterator ishlatilganda bir vaqtda o'zgartirishlar (asosiy to'plamga) ruxsat etilmaydi. Bu har doim bir vaqtning o'zida o'zgartirishlar xavfi mavjud bo'lgan ko'p tarmoqli muhitlarda juda foydali. Bir vaqtning o'zida modifikatsiya qilingan taqdirda, Iterator ob'ekti ConcurrentModificationException ni chiqaradi. Iterator Enumerator bilan solishtirganda qisqaroq usul nomlariga ega. Bundan tashqari, iterator iteratsiya paytida elementlarni o'chirishning qo'shimcha funksiyasiga ega (bu Enumerator yordamida mumkin emas). Shunday qilib, agar to'plamdan elementlarni olib tashlash zarurati tug'ilsa, Iterator ko'rib chiqilishi mumkin bo'lgan yagona imkoniyatdir.

Tavsiya: