3-modul · 5-dars: Set · Comparator · TreeSet
Daraja: O'rta
Set · Comparator · TreeSet. Exception va Collections bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Set · Comparator · TreeSet tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Takrorlanmaydigan (unique) elementlar to'plami — duplicate saqlamaydi.
Unique elementlar, ko'p implementatsiyada tartib yo'q, ko'pchiligi 1 ta null ga ruxsat.
## Intervyuga tayyorgarlik ### Set nima? Takrorlanmaydigan (unique) elementlar to'plami — duplicate saqlamaydi.
### Set-ning asosiy xususiyatlari? Unique elementlar, ko'p implementatsiyada tartib yo'q, ko'pchiligi 1 ta null ga ruxsat.
### Set interfaceni subclassini ayting. `HashSet`, `LinkedHashSet`, `TreeSet`.
### HashSet nima? Hash table (ichkarida `HashMap`) asosidagi Set — tez qo'shish/izlash, tartib yo'q.
### HashSet elementlarni saqlash uchun internal nimadan foydalanadi? Ichkarida `HashMap` (element key sifatida, qiymat esa doimiy dummy obyekt).
### HashSet thread-safe mi? Yo'q.
### HashSet elementlarni kirish tartibida saqlaydimi? Yo'q, tartib kafolatlanmaydi (hash asosida joylashadi).
### HashSet add() method qanday ishlaydi? Element `hashCode()` bilan bucket topiladi, so'ng `equals()` bilan takror tekshiriladi; takror bo'lmasa qo'shiladi.
### HashSet nima uchun duplicate elementlarni saqlab bo'lmaydi? `hashCode()` + `equals()` orqali element mavjudligini tekshirib, takrorini qo'shmaydi.
### LinkedHashSet nima? HashSet + qo'shilish tartibini (insertion order) saqlaydigan Set (ichida linked list bilan).
### LinkedHashSet va HashSet o'rtasidagi farq nima? LinkedHashSet qo'shilish tartibini saqlaydi, HashSet saqlamaydi (LinkedHashSet sal sekinroq, ko'proq xotira).
### LinkedHashSet Java-ning nechinchi versiyasida qo'shilgan? Java 4 (JDK 1.4).
### LinkedHashSet thread-safe mi? Yo'q.
### LinkedHashSet qaysi operatsiyalar uchun samarali? Tartibni saqlab, tez qo'shish/izlash/o'chirish kerak bo'lganda.
### Comparator nima? Obyektlarni tashqi (custom) mezon bo'yicha solishtirish uchun interface (`compare(a,b)`) — bir necha xil saralash imkonini beradi.
### Comparable nima? Obyektning o'zida tabiiy (natural) tartibni belgilovchi interface (`compareTo(o)`).
### Comparator va Comparable interfacelari farqi? Comparable — class ichida, bitta tabiiy tartib (`compareTo`). Comparator — tashqarida, ko'p xil tartib (`compare`), class kodini o'zgartirmaydi.
### Comparator/Comparable Java-ning nechinchi versiyasida qo'shilgan? Ikkalasi ham Java 2 (JDK 1.2) dan.
### Qachon bu 2 interfaceni ishlatamiz? Bitta tabiiy tartib uchun — Comparable; bir nechta yoki tashqi tartib uchun — Comparator.
### TreeSet nima? Red-Black tree asosidagi, elementlarni saralangan (sorted) holda saqlaydigan Set.
### TreeSet duplicate elementlarga ruxsat bormi? Yo'q.
### TreeSet thread-safe mi? Yo'q.
### TreeSet va HashSet o'rtasidagi farq? TreeSet saralangan (Comparable/Comparator), O(log n), null saqlamaydi. HashSet tartibsiz, O(1), 1 null ga ruxsat.
### TreeSet hierarchysini ayting. `TreeSet` → `NavigableSet` → `SortedSet` → `Set` → `Collection`.
### TreeSet elementlarni saqlash uchun internal nimadan foydalanadi? `TreeMap` (Red-Black tree).
### TreeSetga iteratsiya paytida o'zgartirish kiritsak nima bo'ladi? Fail-fast — `ConcurrentModificationException` tashlanadi.
## 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 names = new java.util.TreeSet<String>(
java.util.Comparator.comparingInt(String::length).thenComparing(s -> s));
names.addAll(java.util.List.of("Ali", "Vali", "Aziz", "Ali"));
System.out.println(names);
Keng tarqalgan xatolar
- `HashSet` ga qo'yiladigan class da `equals`/`hashCode` yozmaslik - dublikat aniqlanmaydi.
- `HashSet` tartibni saqlaydi deb o'ylash - kerak bo'lsa `LinkedHashSet` yoki `TreeSet`.
Mashqlar
- O'z class ingizni `HashSet` ga ikki marta qo'shib, `equals` siz va bilan sinang.
- `TreeSet` ga `Comparator` berib, teskari tartibda saralang.
Teglar: nazariya, modul-03, pdp