JavaRush /Kurslar /All lectures for UZ purposes /ArrayList bilan ishlash, 2-qism

ArrayList bilan ishlash, 2-qism

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Ro'yxatning o'rtasiga (yoki boshiga) element qo'shish

Agar biz ro'yxatning o'rtasiga element qo'shmoqchi bo'lsak, ro'yxat ichida mana nima sodir bo'ladi.

Faraz qilaylik, 11 ta elementdan iborat ro'yxat bor:

Ro'yxatning o'rtasiga (yoki boshiga) element qo'shish

Biz 10,000 raqamini 5-raqamli joyga qo'yishni xohlaymiz, buning uchun quyidagi buyruqni bajarish kerak:

list.add(5, 10000);

Bu yerda list — ArrayList turidagi o'zgaruvchi, add(int index, tur value) metodi 10000 qiymatini ro'yxatning 5-pozitsiyasiga qo'shadi. Metod add()da nima sodir bo'layotganini quyida ko'ramiz:

1-qadam: massiving 5-elementidan boshlab barchasi bir pog'ona oxiriga siljiydi (ko'chiriladi):

Ro'yxatning o'rtasiga (yoki boshiga) element qo'shish 1

Diqqat: massiving 5-chi va 6-chi kataklaridagi elementlar endi bir xil.

2-qadam: 5-chi katakka 10,000 qiymatini yozamiz:

Ro'yxatning o'rtasiga (yoki boshiga) element qo'shish 2

Endi ro'yxatda barcha elementlar bor, 5-chi katakda esa 10,000 soni yozilgan. Biz xohlagan narsani qilgan bo'lamiz.



2. Ro'yxatdan elementni o'chirish

Ro'yxatdan elementni o'chirish operatsiyasi, uni qo'shish operatsiyasiga o'xshaydi, faqat jarayon teskari bo'ladi.

Keling, ro'yxatdagi 3-indeksli elementni o'chiraylik, buning uchun quyidagi buyruqni bajarish kerak:

list.remove(3);

Mana remove() metodida nima sodir bo'ladi:

1-qadam: massiving 4-elementidan boshlab barchasi bir pog'ona boshiga siljiydi (ko'chiriladi):

Ro'yxatdan elementni o'chirish 1

2-qadam: size o'zgaruvchining qiymati 1 ga kamayadi.

Ro'yxatdan elementni o'chirish 2

Diqqat: Massiv oxirida, kulrang rangda belgilangan joyda qandaydir qiymatlar bor. Texnik jihatdan bu axlat. Uni olib tashlash kerak, shunda axlat yig'ish jarayoniga xalaqit qilmaydi.

3-qadam: Axlatni o'chirish

Ro'yxatdan elementni o'chirish 3



3. Java'da ro'yxat bilan ishlashning amaliy misollari

Keling, ro'yxatlar bilan bir nechta misollar yozamiz:

Ro'yxatga 1 dan 20 gacha barcha juft sonlarni qo'shamiz:

Kod Izohlar
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);
Obyekt ro'yxatini yaratamiz

barcha 1 .. 20 sondan iborat sikl
agar son 2 ga qoldiqsiz bo'linsa,
uni ro'yxatga qo'shish

Endi ro'yxatdagi barcha elementlarni ekranga chiqaramiz:

Kod Izohlar
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

for (int i = 0; i < list.size(); i++)
   System.out.println(list.get(i));
Obyekt ro'yxatini yaratamiz
barcha 1 .. 20 sondan iborat sikl

agar son 2 ga qoldiqsiz bo'linsa
uni ro'yxatga qo'shish

nolddan ro'yxat o'lchamigacha bo'lgan sikl
har bir elementni ekranga chiqaramiz

Elementlarni o'chirish:

Endi 4 ga bo'linadigan barcha elementlarni o'chiramiz. Diqqat qiling, ro'yxatdan bir element o'chirilganidan so'ng boshqa elementlarning pozitsiyalari o'zgaradi.

Kod Izohlar
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

for (int i = 0; i < list.size(); i++)
   if (list.get(i)%4 == 0)
   {
      list.remove(i);
      i--;
   }
Obyekt ro'yxatini yaratamiz

barcha 1 .. 20 sondan iborat sikl
agar son 2 ga qoldiqsiz bo'linsa,
uni ro'yxatga qo'shish.

nolddan ro'yxat o'lchamigacha bo'lgan sikl
agar ro'yxat elementi 4 ga qoldiqsiz bo'linadigan bo'lsa:

a) elementni o'chirish
b) kelsi safargi siklda yana o'sha elementga borish uchun ini kamaytiring

Oddiyroq usul bor — ro'yxatni oxiridan boshlab aylanib chiqish: for (int i = list.size() - 1; i >= 0; i--). Shunda indekslarning siljishi xalaqit bermaydi va sikl tanasida i-- kerak emas. Shuningdek, removeIf() metodidan foydalanishingiz mumkin: list.removeIf(x -> x % 4 == 0);

Faraz qilaylik, sizga ro'yxatning oxiridan 3 ta elementni o'chirish kerak.

Buni noto'g'ri qilish:

Kod Izohlar
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

int n = list.size();
list.remove(n - 3);
list.remove(n - 2);
list.remove(n - 1);
Obyekt ro'yxatini yaratamiz

ro'yxatda 10 ta element: 2, 4, 6, ... 20



n = 10
n - 3 = 7 (ro'yxatda 9 ta element qoladi)
n - 2 = 8 (ro'yxatda 8 ta element qoladi)
n - 1 = 9 (ro'yxatda 7 ta element qoladi)

7 va 8 elementlarni o'chirib bo'lgandan so'ng, ro'yxatda faqat 8 ta element qoladi. Shuning uchun 9-elementni o'chirib bo'lmaydi — dasturda xato paydo bo'ladi.

Elementlarni qanday qilib to'g'ri o'chirish kerak edi:

Variant 1 Variant 2
int n = list.size();
list.remove(n - 3);
list.remove(n - 3);
list.remove(n - 3);
int n = list.size();
list.remove(n - 1);
list.remove(n - 2);
list.remove(n - 3);

Elementlarni yoki oxiridan o'chirish kerak, yoki bir xil joyda, har bir o'chirishdan so'ng elementlar bir pog'onaga siljiydi.


Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION