1. Arrays.fill() методи
Java dasturchilari ko'plab hollarda massivlarni bir xil qiymatlar bilan to'ldirish vazifasiga duch kelishadi. Buning uchun oddiy sikl yozishi mumkin va har bir elementga berilgan qiymatni o'rnatish mumkin:
int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;
Yoki oddiygina Arrays.fill() metodini chaqirish mumkin, bu metod massivingizni berilgan qiymat bilan to'ldiradi. Mana u qanday ishlaydi:
Arrays.fill(ism, qiymat)
Yuqoridagi kodni biroz ixcham va tushunarli qilishingiz mumkin:
int[] x = new int[100];
Arrays.fill(x, 999);
Bundan tashqari, Arrays.fill() metodidan foydalanib, faqat ma'lum bir qismini to'ldirishingiz ham mumkin:
Arrays.fill(ism, birinchi, so'nggi, qiymat)
Bu yerda birinchi va so'nggi - to'ldirilishi kerak bo'lgan birinchi va oxirgi indekslar.
Misol:
|
Biz x[3], x[4], x[5], x[6] hujayralarini 999 qiymatlari bilan to'ldiramiz. Massiv elementlarining indekslari 0 dan boshlanadi!O'zgaruvchi str quyidagi qiymatni saqlaydi: |
Arrays.fill() metodi faqat bir o'lchovli massivlar bilan ishlaydi. Agar unga ikki o'lchovli massiv uzatilsa, u bir o'lchovli sifatida ko'rib chiqiladi va natija shunga mos keladi.
2. Arrays.copyOf() metodi
Сиз олдиндан биласиз, массив контейнерининг ҳажмини ўғирга майдондан ўзгартира олмайсиз.
Лекин агар жуда ҳам хоҳласангиз, албатта мумкин:
- Керакли узунликда янги массив яратиш
- Биринчи массивдан барча элементларни унга кўчириш.
Aна шу вазифани Arrays.copyOf() методи амалга оширади. У шундай кўринишда чақирилади:
тип[] ism2 = Arrays.copyOf(ism, uzunlik);
Ушбу метод мавжуд массивни ўзгартирмайди, ўрнига янги массив яратади ва унга эски массив элементларини кўчиради.
Агар элементлар сиғмаса (uzunlik мавжуд массивнинг узунлигидан кам бўлса), ортиқча қийматлар эътиборга олинмайди.
Ўз навбатида, янги массив узунлиги эски массивнинг узунлигидан катта бўлса, бўш ҳужайралар ноллар билан тўлдирилади.
Мисол:
|
O'zgaruvchi str2 quyidagi qiymatni saqlaydi: O'zgaruvchi str3 quyidagi qiymatni saqlaydi: |
3. Arrays.copyOfRange() metodi
10 узунликдаги массивиdan 5 узунликdagi массив олишни хоҳласангиз, лекин унда фақат биринчи 5 элемент эмас, балки охирги 5 элемент бўлишини хоҳласангизчи?
Бу ҳолат учун Arrays синфидан яна бир метод - Arrays.copyOfRange() методидан фойдаланасиз. Қуйида унинг чақирилишини кўрсатилган:
тип[] ism2 = Arrays.copyOfRange(ism, birinchi, so'nggi);
Бу метод ҳам янги массив яратади, аммо унинг мазмунида манба массивининг ихтиёрий жойдан олинишни таъминлайди. Бу ерда биринчи ва so'nggi - янги массивда бўлиши керак бўлган биринчи ва охирги ҳужайралар.
Мисол:
|
O'zgaruvchi str2 quyidagi qiymatni saqlaydi: O'zgaruvchi str3 quyidagi qiymatni saqlaydi: |
4. Arrays.sort() metodi
Ҳамма нарсани қийнароқ йўли - саралаш. Дастурлашда массивларни саралаш ҳадисаси жуда кўп марта юз бериши мумкин. Массивлар билан ишлашда учта машҳур операция:
- Массивни саралаш
- Массивнинг минимал (ёки максимал) элементни топиш
- Массивда элементнинг индексига аниқлаш (массивда элементни қидириш)
Шунинг учун Java ишлаб чиқарувчилари Arrays синфига sort() методини киритишди. У шундай вақтда чақирилади:
Arrays.sort(ism);
Бу метод узатилган массивни ўсиш бўйича саралайди.
Мисол:
|
O'zgaruvchi str quyidagi qiymatni saqlaydi: |
Ажойиб, тўғрими? Бироқ методни чақириб, шундай ҳам массивни сарлашингиз мумкин. Гўзаллик эмасми?
Аятганча, фақат бутун массивни эмас, балки унинг қисмларини ҳам саралаш мумкин. У шундай вақтда чақирилади:
Arrays.sort(ism, birinchi, so'nggi);
Бу ерда birinchi ва so'nggi - фойдаланилиши керак бўлган биринчи ва охирги индекслар.
Мисол:
|
O'zgaruvchi str quyidagi qiymatni saqlaydi: |
Java да массивларни сортлаш учун энг тез сортлаш алгоритми — QuickSort қўлланилади. Унинг тезлиги массив ҳажмига қараб N*Log(N) формуласига асосланган.
1000 элементли массивни сортлаш 3000 та ҳужайраларни таққослайди. Миллион элементли массивни сортлаш 6 миллион таққослашни амалга оширади.
5. Arrays.binarySearch() metodi
Ҳамда Arrays синфининг охирги, лекин энг қизиқарли бўлган методлари қуйида келтирилган. У белгиланган қийматни массивда излай олади. Бу оддий қидириш эмас, балки бинар қидириш деб аталувчи услуб. У қуйидагича амалга оширилади:
- Аввал массив сараланади
- Сўнгра массивнинг ўртача элементи изланувчи элемент билан таққосланади.
- Агар изланувчи ўртача элементдан катта бўлса, қидириш массивнинг ўнг ярмига ўтказилади.
- Агар изланувчи элемент ўртача элементдан кичик бўлса, қидириш массивнинг чап ярмида амалга оширилади.
Массив сараланганлиги туфайли, бир таққослаш билан массивнинг ярмини анча эътиборсиз қилиш мумкин. Кейинги қадамда яна бир ярмини эътиборсиз қилсангиз ва шу каби давом этсангиз.
Бу услуб бинар қидиришни жуда тезкор қилади. Миллион(!) элементли массивда у керакли элементнинг индексини атўғри 20 таққослашда топиши мумкин. Шунингнинг билан боғлиқ камчиликлардан бири: массив аввало сараланиши керак, ва бу ҳам вақт олади.
Ушбу метод қуйидагича чақирилади:
int index = Arrays.binarySearch(ism, qiymat);
Бу ерда ism — бўлиб, массивнинг номи, уни Arrays.sort() функцияси ёрдамида сараланган бўлиши керак. qiymat — изланувчи элемент. У метод натижасида қайтилади — массивда изланувчи элементнинг индекси (массив ҳужайраларининг рақами).
Мисоллар:
|
x ҳужайралари: 41 (шунингдек 0 ва 2 индекслари ҳам мос келади)8-7 |
Агар изланувчи элементлар массивда бир неча бўлса, улардан бирининг рақами қайтарилади (масалан, биринчи ёки коддаги охирги элемент бўлиш кафолати йўқ).
Агар элемент массивда топилмаса, индекс манфий бўлади.
6. Arrays синфига Oracle'нинг ҳужжатлари бўйича ҳаволаси
Агар сизга жуда қизиқ бўлса, Arrays синфи ва унинг барча методлари ҳақида ма'лумотларни Oracle сайтида расмий ҳужжатларида ўқишингиз мумкин:
https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Arrays.html
Масалан, Arrays.mismatch() ва Arrays.compare() методлари ҳақида ўқишингиз мумкин. Қаҳраманика сизга уларда бирон-бир фойдали нарса топасиз.
Ва методлар сони кўплигидан чўчимаслик керак - у ерда ҳар бир методга 5-10 нусхалари мавжуд, улар фақат параметр типлари билан фарқ қилади.
GO TO FULL VERSION