Java bir kund



Download 1,09 Mb.
bet21/24
Sana30.09.2022
Hajmi1,09 Mb.
#850991
1   ...   16   17   18   19   20   21   22   23   24
Bog'liq
Java быстрый старт (1)

9


KOLEKSIYALAR

Tabriklaymiz, siz uzoq yo'lni bosib o'tdingiz!


Oxirgi ikki bobda siz o'z sinflaringizni qanday yozishni va ob'ektlarni yaratishni o'rgandingiz.
Ushbu bobda biz obyektlarni saqlash va boshqarishni osonlashtirish uchun Java taqdim etadigan kutubxonani ko'rib chiqamiz. Aniqroq aytganda, biz Java Collections Framework-ni ko'rib chiqamiz.



    1. JAVA TO'PLAMLAR FRAMORK

Java Collections Framework - bu Java ob'ektlar guruhlarini tashkil qilish va boshqarish qulayligini ta'minlaydigan oldindan yozilgan sinflar va interfeyslar to'plami. Collections Framework yordamida siz ob'ektlarni ro'yxatlar, to'plamlar, navbatlar yoki
xaritalar kabi tuzilmalarga ajratishingiz mumkin.
Ushbu bobda men sizga ro'yxatlardan qanday foydalanishni ko'rsataman.

Java Collections Framework ob'ektlar guruhlari bilan ishlash mexanizmlarini standartlashtiradi . Shunday qilib, agar siz ro'yxatlardan qanday foydalanishni bilsangiz, boshqa to'plamlarni (masalan, to'plamlar yoki navbatlar) o'zlashtirishingiz osonroq bo'ladi .



    1. Avtomatik qadoqlash va ochish 173


9.2. AVTOMATLI QO'DLASH VA QO'DLASH
Java Collections Framework haqida gapirishdan oldin , avtomatik boks va unboxing tushunchasini muhokama qilish kerak .
Avvalroq 3-bobda siz Java tilining 8 ta ibtidoiy turi haqida bilib oldingiz. Ushbu 8 ibtidoiy tip ob'ektlar emas, balki asosiy ma'lumotlar turlaridir.
Biroq, Java ob'ektga yo'naltirilgan tildir va tilning ko'p qismi ob'ektlar sifatida barcha ob'ektlar tushunchasi bilan bog'liq. Bu shuni anglatadiki, ko'pincha ibtidoiy turlarni ob'ektlarga aylantirish zarurati mavjud .

Bunday o'zgarishlarni qulayroq qilish uchun Java dasturchiga o'rash sinflari deb ataladigan narsalarni taqdim etadi. Java-ning har bir ibtidoiy turi tegishli o'rash sinfiga ega. Sarmalayÿcÿlar ishlab chiquvchi foydalanishi mumkin bo'lgan foydali usullarni o'z ichiga oladi . Boolean, char uchun o'rash sinflari ,


bayt, short, int, long, float va double - mantiqiy, belgi, bayt, qisqa, butun , uzun , float va juft
mas'uliyat bilan.

Primitiv ma'lumotlar turini o'rash sinfining ob'ektiga aylantirish oson. Masalan, int ni Integer obyektiga aylantirish uchun quyidagi buyruqni bajaring:


Integer intObject = new Integer(100);


174 9 -bob. To'plamlar
Bu yerda Integer klassi konstruktoriga ibtidoiy int tipidagi 100 qiymatini o'tkazib , Integer ob'ektini e'lon qilamiz va yaratamiz . Konstruktor qiymat oladi va uning asosida Integer obyektini yaratadi.
Agar siz Integer obyektini yana int ga aylantirmoqchi bo'lsangiz , intValue() usulidan foydalaning. Jamoa ko'rinadi

Shunday qilib:


int m = intObject.intValue();


intValue () usuli m o'zgaruvchisiga tayinlangan int qiymatini qaytaradi .


Ko'rib turganingizdek, ibtidoiy ma'lumotlar turini ob'ektga aylantirish va aksincha, juda ahamiyatsiz. Biroq, amalda ular odatda yuqoridagi
misolga qaraganda ancha sodda. Java sizning ixtiyoringizda avtomatik boks deb ataladigan ikkita mexanizmni taqdim etadi.

va qadoqdan ochish. Ular bunday o'zgarishlarni avtomatik ravishda amalga oshirishga imkon beradi.


o'rniga int dan butun songa o'tish uchun
Integer intObject = new Integer(100);

har doim shunchaki yozishingiz mumkin


Integer intObject = 100;


Bu yerda intObject ga 100 qiymati tayinlangan . Bu int qiymatini Integer konstruktoriga o'tkazishingiz shart emas ; Java buni biz uchun qiladi. Bu jarayon avtomatik qadoqlash deb ataladi .


Integer o'rniga int ga aylantirish uchun


int m = intObject.intValue();

    1. Avtomatik qadoqlash va ochish 175


yozish uchun etarli

intm = intObject;


intValue() usulini aniq chaqirish shart emas . Integer ob'ektini int o'zgaruvchisiga tayinlaganingizda , Java avtomatik ravishda Integer ob'ektini int turiga o'zgartiradi . Ushbu jarayon paketni ochish deb ataladi .


Ko'rib turganingizdek, o'rash sinflari ibtidoiy turlarni ob'ektlarga va aksincha aylantirish uchun qulay vositalarni taqdim etadi. Bundan tashqari, o'rash sinflari ham muhim amaliy foydalanishga ega - ular satrlarni ibtidoiy turlarga aylantirish usullarini taqdim etadi. Aytaylik, siz satrni int ga aylantirmoqchisiz; Integer sinfida parseInt () usulidan foydalaning
quyida ko'rsatilgan:

int n = Integer.parseInt("5");


Bu erda "5" qo'sh tirnoq bilan ko'rsatilgan qatordir. Integer.parseInt ("5") usuli int qiymati 5 ni qaytaradi , keyin esa n ga tayinlanadi .


Agar satrni int ga aylantirib bo'lmasa , usul NumberFormatException ni chiqaradi . Masalan, quyidagi buyruq xato xabarini chiqaradi:
int p = Integer.parseInt("ABC");

Int ga satrlarni o'zgartirishdan tashqari, parseDouble() usulidan foydalanib, satrni ikkiga aylantirishingiz mumkin . Ikkilik sinf :


double q = Double.parseDouble("5.1");


Oldingi holatda bo'lgani kabi, agar satrni double ga aylantirib bo'lmasa, siz xatoga duch kelasiz .


176 9 -bob. To'plamlar

    1. RO'YXATLAR

Endi biz o'rash sinflarini ko'rganimizdan so'ng, keling, ro'yxatlarga o'tamiz. Ro'yxat massivga juda o'xshaydi, lekin ko'proq moslashuvchanlikka ega - uning hajmini o'zgartirish mumkin.


Siz avvalroq 4-bobda massiv ishga tushirilgandan so‘ng massivning o‘lchamini yoki u e’lon qilinganda ko‘rsatilgan elementlar sonini o‘zgartirib bo‘lmasligini bilib oldingiz.
Masalan, myArray massivi buyruq bilan e'lon qilingan bo'lsa
int[] myArray = new int[10];

keyin u faqat 10 ta qiymatni o'z ichiga olishi mumkin. Agar siz myArray[10] iborasidan foydalansangiz (bu indeks raqamlash noldan boshlangani uchun 11-qiymatni bildiradi), xatolik yuzaga keladi.


Agar dasturingiz ko'proq moslashuvchanlikni talab qilsa, ro'yxatni ishlating. Java tarqatish Java Collections Frameworkning bir qismi bo'lgan foydalanishga tayyor Ro'yxat interfeysini o'z ichiga oladi. Ushbu interfeys bir nechta sinflar tomonidan amalga oshiriladi. List interfeysini amalga oshiradigan barcha sinflardan ArrayList va LinkedList eng ko'p qo'llaniladi . ArrayList sinfidan boshlaylik .

    1. ARRAYLIST

ArrayList - bu List interfeysini amalga oshiradigan oldindan yozilgan sinf . Boshqa barcha Java Collections Framework to'plamlari singari, ArrayList faqat


ob'ektlarni saqlash uchun ishlatilishi mumkin (ibtidoiy turlar emas).
9.4. ArrayList 177

ma'lumotlar). Shuning uchun, agar siz butun sonlar ro'yxatini e'lon qilmoqchi bo'lsangiz, int o'rniga Integer dan foydalanishingiz kerak bo'ladi .
ArrayList -dan dasturda foydalanish uchun java.util.ArrayList sinfini quyidagi buyruq bilan import qilishingiz kerak :
import java.util.ArrayList;

ArrayList -ni e'lon qilish va yaratish sintaksisi :


ArrayList nameOfArrayList = new ArrayList<>();

Masalan, massivni e'lon qilish va ishga tushirish Integer ob'ektlari ro'yxati , biz yozuvdan foydalanamiz


ArrayList userAgeList = new ArrayList<>();

Array o'zgaruvchisi buyruqning chap tomonida e'lon qilinadi


Roÿyxat.

ArrayList so'zi ArrayList to'plami e'lon qilinayotganini


anglatadi . bo'limi ArrayList degan ma'noni anglatadi
Integer obyektlarini saqlash uchun ishlatiladi . userAgeList - ArrayList to'plam ob'ektining nomi.
O'ng tomonda new kalit so'zi bilan yangi ArrayList ob'ekti yaratiladi va userAgeList ga tayinlanadi .
Agar yaratilayotgan ArrayList to'plami String ob'ektlarini saqlash uchun mo'ljallangan bo'lsa, buyruq ob'ektni e'lon qilish va yaratish uchun ishlatiladi.
ArrayList userNameList = new ArrayList<>();

Ikkala misolda biz ArrayList to'plamini e'lon qilamiz


va unga ArrayList obyektini tayinlang . Biroq, da
178 9 -bob. To'plamlar
Agar xohlasangiz, Ro'yxat to'plamini ham e'lon qilishingiz mumkin
va unga ArrayList ni tayinlang .
Ushbu parametr mumkin, chunki List ArrayList tomonidan amalga oshirilgan interfeysdir .
Ro'yxat to'plamini e'lon qilish va unga massivni tayinlash Ro'yxat, buyruqdan foydalaning
List userNameList2 = new ArrayList<>();

Agar siz ushbu yozuvdan foydalanmoqchi bo'lsangiz, java.util.List -ni import qilishingiz kerak.





      1. ARRAYLIST USULLARI

qo'shish()

Ro'yxatga yangi elementlar qo'shish uchun add() usulidan foydalaning:


userAgeList.add(40); userAgeList.add(53); userAgeList.add(45); userAgeList.add(53);
Roÿyxat elementlarini chop etish uchun System.out.println() chaqiruvidan foydalanishingiz mumkin . Masalan, ijro etayotganda

System.out.println(userAgeList);


9.4. ArrayList 179

quyidagi natijaga erishadi:
[40, 53, 45, 53]

Muayyan ro'yxat pozitsiyasiga elementlarni qo'shish uchun quyidagi qo'shish shaklidan foydalaning:


userAgeList.add(2, 51);

Buyruq 2-pozitsiyaga 51 raqamini kiritadi (ya'ni uchinchi pozitsiya).


Keyin userAgeList [40, 53, 51, 45, 53] elementlarini o'z ichiga oladi .

set()
set() usuli berilgan pozitsiyadagi elementni boshqasi bilan almashtiradi


Sport zali elementi.

Masalan, 3-indeksdagi elementni 49 qiymatiga almashtirish uchun quyidagi buyruqni bajaring:


userAgeList.set(3, 49);

Birinchi argument almashtiriladigan element indeksi, ikkinchi argument esa joriy qiymatni almashtirish uchun qiymatdir.


Keyin userAgeList [40, 53, 51, 49, 53] elementlarni o'z ichiga oladi.
olib tashlash()

Remove() usuli elementni berilgan joydan olib tashlaydi . Remove() usuli argument sifatida olib tashlanadigan element indeksini oladi . Masalan, buyruq


userAgeList.remove(3);
180 9 -bob. To'plamlar
3-indeksdagi elementni olib tashlaydi.
Shundan so'ng, userAgeList ro'yxatida [40, 53, 51, 53] elementlar mavjud .

get()
Get() usuli elementni berilgan pozitsiyada olish uchun ishlatiladi .


Jamoa
userAgeList.get(2);

51 qiymatini qaytaradi.


hajmi()
Miqdorni olish uchun size() usuli qo'llaniladi
ro'yxatdagi narsalar.

userAgeList.size() ArrayList dan beri 4 qiymatini qaytaradi


hozirda 4 ta elementni o'z ichiga oladi.
o'z ichiga oladi()

contain () usuli roÿyxatda berilgan element mavjudligini tekshiradi.


userAgeList 51 qiymatini o'z ichiga olganligini tekshirish uchun buyruqni bajaring
userAgeList.contains(51);

Natija haqiqat bo'ladi.


Agar siz buyruqdan foydalansangiz
userAgeList.contains(12);

natija yolg'on bo'ladi.



    1. ArrayList 181


indexOf()
indexOf() usuli berilgan elementning birinchi marta paydo bo'lish indeksini qaytaradi . Agar element ArrayList da mavjud bo'lmasa , usul -1ni qaytaradi .
Masalan, buyruqni bajarishda
userAgeList.indexOf(53);
natija 1 bo'ladi . Va 53 qiymati ArrayList da ikki marta sodir bo'lsa-da , siz faqat birinchi paydo bo'lgan indeksni olasiz.
Agar siz buyruqni bajarsangiz
userAgeList.indexOf(12);
natija -1 bo'ladi, chunki 12 raqami ArrayList da mavjud emas.

toArray()


toArray () usuli ArrayList ning barcha elementlarini olish uchun ishlatiladi . Usul ArrayList ning barcha elementlarini to'g'ri tartibda (birinchi elementdan oxirgi elementgacha) o'z ichiga olgan Ob'ekt tipidagi massivni qaytaradi.
Masalan, buyruq
Object[] myArray = userAgeList.toArray();

userAgeList -ni aylantirish uchun foydalanish mumkin


Object[] massiviga . (Esingizda bo'lsin, Object klassi Java
-dagi barcha sinflarning ota-sinfidir.)
Agar toArray() usuli ma'lum turdagi elementlarga ega massivni qaytarishini istasangiz, turni o'tkazing
182 9 -bob. To'plamlar
argumentdagi massiv. Misol uchun, agar toArray() usuli
standart Object[] massivi o‘rniga Integer[] ni qaytarishi kerak , buyruqdan foydalaning

Integer[] myIntArray =


userAgeList.toArray(yangi Integer[0]);

Bunday holda, toArray() ga 0 o'lchamli (yangi Integer[0]) Integer massivi uzatiladi.


Bunday holda, toArray() usuli Integer massivini qaytaradi , keyin uni myIntArray o'zgaruvchisiga tayinlash mumkin.

aniq()
clear() usuli barcha elementlarni roÿyxatdan olib tashlaydi . Keyin


buyruqni bajarish

userAgeList.clear();


ro'yxatda hech qanday element qolmaydi.


Java'da ArrayList usullarining to'liq ro'yxatini quyidagi manzilda topishingiz mumkin : https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html.



    1. BOG'LANGAN RO'YXAT

Keling, LinkedList to'plamiga o'tamiz.


LinkedList to'plami ArrayList ga juda o'xshaydi va undagi amallar xuddi shunday ishlaydi. Ikkala to'plam ham List interfeysini amalga oshiradi.
LinkedList va ArrayList o'rtasidagi asosiy farq ularning amalga oshirilishidir. ArrayList o'lchami o'zgartiriladigan massiv sifatida amalga oshiriladi . Yangisini qo'shganda
9.5. Bog'langan ro'yxat 183
elementlarning hajmi dinamik ravishda oshadi.
ArrayList o'rtasiga yangi element qo'shsangiz , hamma narsa
Ushbu elementdan keyingi elementlar oxirigacha o'tkazilishi
kerak . Misol uchun, agar myArrayList uchta elementni o'z ichiga olsa:

myArrayList = {"Salom", "Xayrli", "Tong"};


va siz "Dunyo" qatorini 1-pozitsiyaga (ya'ni, "Salom" dan keyin) kiritmoqchi bo'lsangiz, "Salom" dan keyingi barcha elementlarni siljitish kerak bo'ladi.


ArrayList dan element olib tashlanganida , olib tashlangan elementdan keyingi barcha elementlar boshiga o'tkazilishi kerak. Agar ArrayList katta bo'lsa, bu sezilarli kechikishga olib kelishi mumkin .
Agar siz ro'yxatingizga narsalarni tez-tez qo'shsangiz va olib tashlasangiz , LinkedList to'plamidan foydalanish yaxshiroq bo'lishi mumkin. LinkedList elementlari ikkita qo'shni elementning manzillarini saqlaydi : oldingi va keyingi . Aytaylik , LinkedList mos ravishda 111, 122 va 133 -manzillarda saqlanadigan “Salom”, “Yaxshi” va “Tong” uchta elementidan iborat . Quyidagi diagrammada LinkedList ilovasi qanday ko'rinishi ko'rsatilgan.

"Salom" birinchi element bo'lgani uchun uning oldingi elementi yo'q. Shu sababli, chapdagi qutida nullga ishora qiluvchi o'q bor ( bu shunchaki "hech narsa" ga ishora qiladi). O'ngdagi to'rtburchakda 122-manzil - manzil mavjud


keyingi element.

"Yaxshi" element uchun 111 (oldingi elementning manzili) chap to'rtburchakda saqlanadi va 133 (keyingi elementning manzili) o'ng to'rtburchakda saqlanadi.



184 9 -bob. To'plamlar

"Salom" elementi uchun 133-manzil o'ngdagi to'rtburchakda saqlanadi , ya'ni "Morning" elementining manzili.


Shu tarzda amalga oshirilgan ro'yxatda qo'shish/ o'chirishda elementlarni siljitishning hojati yo'q. Bularning
barchasi kerak bo'lganda manzillarni o'zgartirishga to'g'ri keladi.
Hozirda hech qanday element "Yaxshi" elementga ishora qilmaganligi sababli , Java Virtual Mashina oxir-
oqibat elementni olib tashlaydi va barcha bo'sh joyni bo'shatadi.
Men ularni xotirlayman.

ArrayList o'rniga LinkedListni qachon tanlash kerak?


Odatda, LinkedList to'plamga tez-tez qo'shimchalar va o'chirishlar mavjud bo'lganda ishlatiladi .
Bundan tashqari, LinkedList klassi Queue interfeyslarini amalga oshiradi va Deque ro'yxati interfeysidan tashqari. Queue va Deque Java Collections Frameworkning yana ikkita interfeysidir. Kuzatish -
9.5. Bog'langan ro'yxat 185
Shubhasiz, agar siz ushbu ikkita interfeysning har qanday usullaridan (masalan , offer(), peek(), poll(), getFirst(), getLast() va boshqalar) foydalanmoqchi bo'lsangiz, ArrayList o'rniga LinkedList dan foydalanishingiz kerak bo'ladi. .

Ammo shuni yodda tutingki, LinkedList ArrayList -ga qaraganda ko'proq xotiradan foydalanadi , chunki qo'shni elementlarning manzillarini saqlash uchun qo'shimcha xotira talab qilinadi. Bundan tashqari, LinkedList -da ma'lum bir elementni qidirish


ko'proq vaqt talab etadi, chunki siz ro'yxatning birinchi elementidan boshlashingiz va kerakli elementga yetguningizcha havolalarga amal qilishingiz kerak bo'ladi.
ArrayList bilan solishtiring , bu erda har bir elementning manzili birinchi elementning manzilidan hisoblanadi. Shuning uchun, LinkedList vaziyatda tanlanmasligi kerak
xotirasi etarli bo'lmagan yoki tez-tez bajariladigan missiyalar
qidiruv operatsiyalari.
Keling, qanday qilib e'lon qilish va instantiatsiya qilishni ko'rib chiqaylik
Bog'langan ro'yxat. Sintaksis quyidagicha ko'rinadi:

LinkedList nameOfLinkedList = yangi LinkedList<>();


Masalan, bog'langanni e'lon qilish va yaratish uchun


Integer obyektlarini o'z ichiga olgan ro'yxat , buyruq ishlatiladi

LinkedList userAgeLinkedList = yangi LinkedList<>();


Har bir narsa ArrayList misollarini e'lon qilish va yaratish bilan deyarli bir xil, faqat Array List so'zi LinkedList bilan almashtirildi . Bog'langan ro'yxatni ishlatish uchun uni import


qilishingiz kerak. Buning uchun import buyrug'ini bajaring:
import java.util.LinkedList;
186 9 -bob. To'plamlar
ArrayList-da bo'lgani kabi , siz ham Ro'yxatni e'lon qilishingiz mumkin va unga LinkedList obyektini tayinlang. Bu quyidagi buyruq bilan amalga oshiriladi:
List userAgeLinkedList2 = new LinkedList<>();

Agar siz ushbu parametrni tanlasangiz, List sinfi ham import qilinishi kerak bo'ladi.





      1. BOG'LANGAN RO'YXAT USULLARI

LinkedList klassi ko'plab tayyor usullarni o'z ichiga oladi , dasturlaringizda foydalanishingiz mumkin. Ammo List interfeysi LinkedList va ArrayList-ni ham amalga oshirganligi sababli ular ko'plab umumiy usullarni o'z ichiga oladi. Aslida, ArrayList bo'limida tavsiflangan barcha usullar LinkedList to'plamlarida ishlatilishi mumkin.


Bu add(), set(), get(), size(), remove( ), contain( ), indexOf(), toArray() va clear() usullarini bildiradi.
ArrayList va LinkedList uchun xuddi shunday ishlaydi. Buni tekshirish uchun NetBeans-ni ishga tushiring va ListDemo nomli yangi loyiha yarating.
Yaratilgan kodni quyidagi bilan almashtiring:
paketlar ro'yxati demo; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; umumiy sinf ListDemo {
umumiy statik void main(String[] args) { List userAgeList = new ArrayList<>(); userAgeList.add(40);
userAgeList.add(53); userAgeList.add(45);

    1. Bog'langan ro'yxat 187

userAgeList.add(53); userAgeList.add(2, 51);

System.out.println(userAgeList.size()); userAgeList.remove(3); System.out.println(userAgeList.contains(12)); System.out.pr intln(userAgeList.indexOf(12)); System.out.println(userAgeList.get(2));


Integer[] userAgeArray =
userAgeList.toArray(yangi Integer[0]); System.out.println(userAgeArray[0]);
System.out.println(userAgeList);

} }


Ushbu parcha ArrayList bo'limida aytib o'tilgan ba'zi usullarni namoyish etadi. Ushbu kod bajarilganda quyidagi natija olinadi:


5
yolg'on
-bir
51
40
[40, 53, 51, 53]

Endi buyruqni almashtiring


List userAgeList = new ArrayList<>();


jamoa

List userAgeList = new LinkedList<>();

va dasturni qayta ishga tushiring.


Nimani ko'ryapsiz? Hammasi yaxshi ishlaydi va natija o'zgarmadi, to'g'rimi?


188 9 -bob. To'plamlar
Buning sababi, ArrayList va Bog'langan ro'yxat sinflari List interfeysini amalga oshiradi, shuning uchun ular juda ko'p umumiy usullarni o'z ichiga oladi.
Lekin yuqorida aytib o'tilganidek, Ro'yxat interfeysidan tashqari, sinf LinkedList shuningdek Queue va Deque interfeyslarini amalga oshiradi. Bu List interfeysida va ArrayList sinfida
mavjud bo'lmagan qo'shimcha usullarni o'z ichiga olganligini anglatadi .
Agar siz ushbu usullardan foydalanmoqchi bo'lsangiz, List o'rniga LinkedList ni e'lon qilishingiz kerak bo'ladi . Quyida
sanab o'tilgan usullarni sinab ko'rish uchun buyruqni almashtiring
List userAgeList = new LinkedList<>();

jamoa

LinkedList userAgeList = new LinkedList<>();
so'rovnoma()

Poll () usuli ro'yxatning birinchi elementini ( boshlang'ich element deb ham ataladi) qaytaradi va uni ro'yxatdan o'chiradi . Agar ro'yxat bo'sh bo'lsa, u nullni qaytaradi .


Agar userAgeList massivida [40, 53, 51, 53] elementlar mavjud bo'lsa , buyruqni bajarganingizda
System.out.println(userAgeList.poll());

natijaga erishasiz


40

userAgeList ning birinchi elementi 40 bo'lgani uchun. Agar userAgeList elementlarini yana chiqarsangiz, siz olasiz .



    1. 189-usullarda ro‘yxatlardan foydalanish

[53, 51, 53].

Birinchi element ro'yxatdan chiqarib tashlandi.


peek()
peek() usuli poll() usuliga o'xshaydi . U ro'yxatning birinchi elementini qaytaradi , lekin uni ro'yxatdan olib tashlamaydi. Agar ro'yxat bo'sh bo'lsa, usul nullni qaytaradi .

getFirst()


getFirst () usuli peek() bilan deyarli bir xil . Shuningdek , u ro'yxatning birinchi elementini o'chirmasdan qaytaradi. Ammo ro'yxat bo'sh bo'lsa, bu usul NoSuch ElementException ni chiqaradi.

getLast()


getLast () usuli roÿyxatning oxirgi elementini oÿchirmasdan qaytaradi . Agar ro'yxat bo'sh bo'lsa, usul NoSuchElementException ni chiqaradi .

Java'dagi LinkedList usullarining to'liq ro'yxatini quyidagi manzilda topishingiz mumkin : https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html.


9.6. RO'YXATLARDAN USULLARDA FOYDALANISH


Java-da ikkita eng mashhur ro'yxat turlarini ko'rib chiqqandan so'ng, keling, ulardan qanday foydalanishni ko'rib chiqamiz.
190 9 -bob. To'plamlar

usullari ro'yxati. Usullarda ro'yxatlar bilan ishlash massivlarni ishlatishdan unchalik farq qilmaydi. Quyidagi misollar ko'rsatish maqsadida Integer obyektlarining ArrayList to'plamidan foydalanadi. Xuddi
shu sintaksis boshqa turdagi to'plamlar uchun ham ishlaydi.
ArrayList ni parametr sifatida olish uchun usulni shunday deb e'lon qiling
public void methodOne(ArrayList m)
{
// Amalga oshirish kodi
}

Metoddan ArrayList ni qaytarish uchun deklaratsiya


usul quyidagicha ko'rinishi kerak:

public ArrayList methodTwo()


{
ArrayList a = new ArrayList<>();
// Amalga oshirish kodi
a qaytarish;
}

Aytaylik, methodOne() va methodTwo() MyClass va nomli sinfda


MyClass mc = yangi MyClass();

methodOne() ni chaqirish uchun ArrayList ni argument sifatida topshiring :


ArrayList b = new ArrayList<>();

mc.methodOne(b);


methodTwo() ni chaqirish uchun natijani ArrayList ga tayinlang.


ArrayList c = mc.methodTwo();
Machine Translated by Google


o'n
FAYL BILAN AMALIYATLAR

Hozirda siz ko'plab asosiy Java tushunchalari bilan tanishsiz. Ushbu bobda biz Java tilidagi yana bir muhim mavzuni, tashqi fayllarda o'qish va yozish operatsiyalarini ko'rib chiqamiz.


Avvalroq 5-bobda siz keyingiInt(), nextDouble(), nextLine() va boshqalar kabi usullardan foydalangan holda foydalanuvchidan ma'lumot olishni o'rgandingiz. Bu haqiqatga to'g'ri kelmaydi , ayniqsa u katta hajmdagi ma'lumotlar bilan ishlayotgan bo'lsa. Bunday hollarda kerakli ma'lumotlarni dasturlar o'qishi mumkin bo'lgan tashqi faylda tayyorlash qulayroqdir .

Java sizga fayllar bilan ishlash uchun sinflar va usullar to'plamini taqdim etadi . Ushbu bob File, BufferedReader, FileReader, BufferedWriter va FileWriter sinflarini qamrab oladi . Bu sinflarning barchasi java.io.package tarkibiga kiritilgan . Ushbu bobdagi usullardan


foydalanish uchun dasturingizga quyidagi import buyrug'ini kiriting:
import java.io.*;
* belgisi java.io to'plami barcha sinflarni o'z ichiga olgan dasturga import qilinganligini bildiradi
10.1. Matn faylidan ma'lumotlarni o'qish 193

kerak. Bundan tashqari, sinflarni bir vaqtning o'zida import qilishingiz mumkin,
agar siz ushbu variantni afzal ko'rsangiz.

10.1. MATLI FAYDDAN MA'LUMOTLARNI O'QISH


FileReader sinfi matn faylidan ma'lumotlarni o'qish uchun ishlatiladi . Bu sinf fayl mazmunini belgilar ketma-ketligi sifatida o'qiydi, ulardan belgilar


birma-bir o‘qiladi.


Nazariy jihatdan, bu fayldan o'qish uchun kerak bo'lgan narsadir . FileReader ob'ekti yaratilgandan so'ng , siz ma'lumotlarni o'qishga o'tishingiz mumkin. Biroq, amalda bu o'qish usuli odatda samarasiz .
Yana samarali tarzda FileReader obyekti
BufferedReader obyektiga kiritilgan.

BufferedReader obyekti fayllardan operatsiyalarni o'qish uchun buferlashni qo'llab-quvvatlaydi . Aslini olganda, bu kontseptsiya Internetda videolarni tomosha qilishda video ma'lumotlarning buferlanishiga o'xshaydi.


Tarmoqdan yoki diskdan bir vaqtning o'zida bitta belgini o'qish o'rniga , BufferedReader ob'ekti kattaroq blokni o'qiydi.


jarayonni tezlashtirish uchun o'lcham.

Aytaylik, siz myFile faylidan ma'lumotlarni o'qishni xohlaysiz.


txt loyihangiz bilan bir xil papkada joylashgan. Quyidagi misol bu qanday amalga oshirilganligini ko'rsatadi. Ushbu misolni sinab ko'rish uchun NetBeans- ni ishga tushiring va yarating
194 10-bob. Fayl operatsiyalari

FileHandlingDemo nomli yangi loyiha . Yaratilgan kodni quyidagi bilan almashtiring:

1packagefilehandling demo; 2 import java.io.*;


3
4 umumiy sinf FileHandlingDemo { 5

6
7

sakkiz

9
o'n
umumiy statik void main(String[] args) {

ip chizig'i;


BufferedReader o'quvchi = null;

o'n bir

12
13


o'n to'rt
o'n besh
16
17


o'n sakkiz
19
harakat qilib ko'ring
{

o'quvchi = yangi BufferedReader(yangi


FileReader("myFile.txt")); line = reader.readLine(); while (satr!=
null)
{
System.out.println(satr); line = reader.readLine();
}

yigirma

21
22
23
24
25
26
27
28
29
o'ttiz
31
32
33
34

} catch (IOException e)


{
System.out.println(e.getMessage());
}
nihoyat
{

harakat qilib ko'ring


{
agar (o'quvchi != null) reader.close();
}
catch (IOException e)
{
System.out.println(e.getMessage());

10.1. Matn faylidan ma'lumotlarni o'qish 195

Bu buyruqda avval FileReader obyektini yaratamiz (tagi chizilgan qism) ma'lumotlar o'qiladigan faylga yo'l bilan . Ushbu fayl loyiha bilan bir xil papkada joylashganligi sababli, yo'l oddiygina "myFile.txt" qatoridir.
FileReader obyekti yaratilgandan so‘ng FileReader obyektini BufferedReader konstruktoriga argument sifatida o‘tkazish orqali yangi BufferedReader obyekti yaratiladi. Men “FileReader obyekti BufferedReader obyektiga o‘ralgan ” deganimda shuni nazarda tutyapman . Bu zarur , chunki BufferedReader obyekti qaysi ma'lumotlar oqimini buferlashni bilishi kerak.
BufferedReader ob'ekti yaratilgandan so'ng , u o'quvchi o'zgaruvchisiga tayinlanadi . Endi hamma narsa fayldan o'qishga tayyor.
196 10-bob. Fayl operatsiyalari

14-qatorda sinf tomonidan taqdim etilgan readLine() usuli
BufferedReader fayldan birinchi qatorni o'qish uchun chaqiriladi .
Bu jamoa tomonidan amalga oshiriladi
line = reader.readerLine();

Agar satr null bo'lmasa (ya'ni ma'lumotlar mavjud bo'lsa), 15-19-satrlarda while sikli bajariladi. while tsikli ichida birinchi navbatda o'qish chizig'ini ekranga chop etish uchun println() usuli qo'llaniladi. Keyin keyingi qatorni o'qish uchun yana bir readLine() buyrug'i (18- satrda) ishlatiladi . Oxirgi satr o'qilguncha tsikl davom etadi .


Keyin 21-24 satrlar catch blokini belgilaydi . Bu blok oddiygina xato xabarini chop etadi, agar
istisnolar.

25-36 qatorlar yakuniy blokni o'z ichiga oladi. Blok ichida ichki sinash bloki (27-31-qatorlar) BufferedReader ob'ektini yopish uchun ishlatiladi , bu ob'ekt foydalangan bo'lishi mumkin bo'lgan har qanday tizim resurslarini ozod qilishni ta'minlaydi . BufferedReader ob'ekti kerak bo'lmaganda har doim uni yoping . Agar biron sababga ko'ra ob'ektni yopishga urinish muvaffaqiyatsiz tugasa, ichki tutash bloki (32-35-qatorlar) xatoni ushlaydi va tegishli xato xabarini chop etadi.


Java matnli fayllardan ma'lumotlarni shunday o'qiydi . Ushbu dasturni ishga tushirish uchun avval myFile.txt nomli matn faylini yarating va uni loyiha papkasida


saqlang . Agar loyiha papkasini topa olmasangiz,-ni bosing-

    1. Matn faylidan ma'lumotlarni o'qish 197


NetBeans Project Explorer oynasida loyiha nomini o'ng tugmasini bosing va " Xususiyatlar" ni tanlang. Ekranda ma'lumot dialog oynasi paydo bo'ladi.
loyihangizning joylashuvi haqida.

Fayl boshqa joyda ham saqlanishi mumkin, lekin dasturdagi yo'lni yangilashni unutmang. Misol uchun, agar siz Windows-dan foydalansangiz va fayl Hujjatlar jildida saqlangan bo'lsa , yo'l quyidagicha ko'rinadi:





Download 1,09 Mb.

Do'stlaringiz bilan baham:
1   ...   16   17   18   19   20   21   22   23   24




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©www.hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish