3-modul · 8-dars: Views · Copy · Iterator
Daraja: O'rta
Views · Copy · Iterator. Exception va Collections bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Views · Copy · Iterator tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Asl collection ustidagi «oyna» — alohida nusxa emas, o'sha ma'lumotga boshqa ko'rinishdagi murojaat (masalan `subList`, `keySet`).
O'zgarmas bo'sh collection qaytarish uchun (`Collections.emptyList()`) — null o'rniga xavfsiz va xotira tejamkor.
## Intervyuga tayyorgarlik ### View nima? Asl collection ustidagi «oyna» — alohida nusxa emas, o'sha ma'lumotga boshqa ko'rinishdagi murojaat (masalan `subList`, `keySet`).
### Empty View bizga nima uchun kerak? O'zgarmas bo'sh collection qaytarish uchun (`Collections.emptyList()`) — null o'rniga xavfsiz va xotira tejamkor.
### Unmodifiable views nima? Faqat o'qishga ruxsat beruvchi ko'rinish (`Collections.unmodifiableList()`); o'zgartirsa `UnsupportedOperationException` beradi.
### Shallow Copy nima? Yangi obyekt yaratiladi, lekin ichki obyektlarga havolalar nusxalanadi (bir xil obyektga ishora qiladi).
### Deep Copy nima? Obyekt va uning ichidagi barcha obyektlar to'liq (rekursiv) nusxalanadi — mustaqil nusxa.
### Deep Copy va Shallow Copy o'rtasidagi farq? Shallow — ichki obyektlar bo'lishiladi (birida o'zgarish ikkinchisiga ta'sir qiladi). Deep — to'liq mustaqil nusxa.
### Shallow Copy-ni qayerda ishlatamiz? Ichki obyektlar immutable bo'lsa yoki bo'lishish maqsad bo'lsa — tez va xotira tejamkor.
### Deep Copy-ni qayerda ishlatamiz? Nusxa asl obyektdan butunlay mustaqil bo'lishi kerak bo'lganda (o'zgarishlar ta'sir qilmasin).
### Iterator nima? Collection elementlarini ketma-ket aylanib chiqish uchun interface (`hasNext()`, `next()`, `remove()`).
### Java-da nechta Iterator bor? Asosan `Iterator`, `ListIterator` va (legacy) `Enumeration`.
### Iterator hasNext() method nima uchun ishlatiladi? Keyingi element bor-yo'qligini tekshirish (bor bo'lsa `true`).
### ListIterator nima? List uchun ikki tomonlama (oldinga/orqaga) yuruvchi, element qo'shish/o'zgartirish imkonli iterator.
### ListIterator va Iterator o'rtasidagi farq? Iterator faqat oldinga, `remove` bor. ListIterator ikki tomonlama, `add`/`set`/`previous` bor, faqat List uchun.
### Fail-Safe iterators nima? Iteratsiya paytida o'zgarishga chidamli — nusxa (copy) ustida ishlaydi, exception tashlamaydi (`CopyOnWriteArrayList`, `ConcurrentHashMap`).
### Fail-Fast iterators nima? Iteratsiya paytida collection o'zgarsa darhol `ConcurrentModificationException` tashlaydi (ArrayList, HashMap).
### Fail-Fast va Fail-Safe o'rtasidagi farq? Fail-Fast asl collection ustida ishlaydi va o'zgarishda exception beradi. Fail-Safe nusxa ustida ishlaydi, exception bermaydi (lekin oxirgi o'zgarishlarni ko'rmasligi mumkin).
## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/3-module.md) [Rasmiy qo‘llanma](https://dev.java/learn/api/collections-framework/) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
var original = new java.util.ArrayList<>(java.util.List.of(1, 2, 3));
var view = original.subList(0, 2);
view.set(0, 9);
System.out.println(original); // [9, 2, 3]
var copy = new java.util.ArrayList<>(view);
Keng tarqalgan xatolar
- Shallow copy ni to'liq nusxa deb o'ylash: ichki obyektlar ulashilgan bo'lib qoladi.
- View ni mustaqil collection deb bilish - asl o'zgarsa view ham o'zgaradi.
Mashqlar
- Ichida ro'yxati bor obyektni shallow va deep nusxalab, birini o'zgartirib farqni ko'rsating.
- `Collections.unmodifiableList` dan qaytgan ro'yxatga element qo'shib ko'ring.
Teglar: nazariya, pdp, modul-03