Java ArrayList va LinkedList

List (ro’yxat) - tartiblangan to’plamni saqlash uchun ishlatiladi. U indeksga asoslangan metodlar iborat: qo’shish, o’zgartirish, o’chirish, va izlash. Listda dublikat va null qiymatlarni saqlash mumkin.

List interfeysi - java.util papkasida joylashgan va Collection interfeysidan meros oladi. ListIterator interfeysi yordamida ro’yxat elementlarini to’g’ri yoki teskari tartibda ko’rib chiqishimiz mumkin. List interfeysi quyidagi classlar tomonidan implementatsiya qilinadi: ArrayList, LinkedList, Stack va Vector. Vector classi Java 5 dan keyin eskirgan.

ArrayList - elementlar saqlash uchun mo’ljallangan dinamik massivdir. Unda oldindan o’lcham belgilanmaydi, natijada biz xohlagan paytda element qo’shishimiz yoki o’chirishimiz mumkin. Java dasturlash tilida ArrayList classi AbstractList classidan meros oladi va List interfeysini implementatsiya qiladi, shuning uchun uning barcha metodlaridan foydalanishi mumkin.

ArrayList classining muhim nuqtalari quyidagilar:

  • U dublikat elementlardan iborat bo’lishi mumkin.
  • U elementlar qo’shilish tartibini saqlaydi.
  • U sinxronlashmagan.
  • U indekslarga asoslangan, shuning uchun xohlagan indeksga murojaat qilish mumkin.
  • ArrayListda, elementlar manipulyatsiyasi LinkedListga qaraganda sekinroq bo’ladi, chunki arraylistdan element o’chirganda ko’p elementlar o’z o’rnini o’zgartirishi mumkin.
  • Sodda turdagi ma’lumotlar yordamida arraylist yaratish imkonsiz, masalan, int, char, boolean bilan. Buning uchun ularning alternativi hisoblangan “wrapper” classlardan foydalanish mumkin.
  • ArrayList yaratilganda uning dastlabki o’lchamini belgilash mumkin. Lekin bu o’lcham dinamik bo’lib, element qo’shganda va o’chirganda o’zgaradi.

ArrayList classida 3 ta konstruktor mavjud:

  • ArrayList() - bo’sh arraylist yaratadi.
  • ArrayList(Collection<? extends E> c) - berilgan to’plam elementlaridan iborat arraylist yaratadi.
  • ArrayList(int capacity) - dastlabki o’lchamga ega arraylist yaratadi.

ArrayList classining ko’p ishlatiladigan metodlari quyidagilar:

  • void add(int index, E element) - biror indeksga element qo’shadi
  • boolean add(E e) - list oxiriga element qo’shadi
  • boolean addAll(Collection<? extends E> c) - berilgan to’plamning barcha elementlari listning oxiriga qo’shiladi.
  • boolean addAll(int index, Collection<? extends E> c) - berilgan to’plamning barcha elementlari listning berilgan indeksidan boshlab qo’shiladi.
  • void clear() - listning barcha elementlarini o’chiradi.
  • void ensureCapacity(int requiredCapacity) - list o’lchamini berilgan o’lchamga oshiradi.
  • E get(int index) - berilgan indeksdagi elementni qaytaradi.
  • boolean isEmpty() - listni bo’shlikka tekshiradi.
  • int lastIndexOf(Object o) - berilgan element listda mavjud bo’lsa, uning oxirgi indeksini, aks holda -1 qaytaradi.
  • Object[] toArray() - listni massiv shakliga o’tkazadi.
  • boolean contains(Object o) - berilgan element listda mavjud bo’lsa true, aks holda false qiymat qaytaradi.
  • int indexOf(Object o) - berilgan element listda mavjud bo’lsa, uning birinchi indeksini, aks holda -1 qaytaradi.
  • E remove(int index) - berilgan indeksdagi elementni o’chiradi.
  • boolean remove(Object o) - berilgan element listda mavjud bo’lsa, uning birinchi uchraganini o’chiradi va true, aks holda false qiymat qaytaradi.
  • boolean removeAll(Collection<?> c) - listdan berilgan to’plamdagi barcha elementlarni o’chiradi.
  • boolean removeIf(Predicate<? super E> filter) - berilgan shartni qanoatlantiradigan barcha elementlarni o’chiradi.
  • E set(int index, E element) - berilgan indeksdagi element o’rniga berilgan elementni joylaydi.
  • void sort(Comparator<? super E> c) - berilgan shart asosida listni tartiblaydi.
  • int size() - listdagi jami elementlar sonini qaytaradi.

Quyidagi misolda list yaratamiz va unga element qo’shib, ularni sikl yordamida chop etamiz:

import java.util.*;
public class ListMisol{
   public static void main(String args[]){
       ArrayList<String> list = new ArrayList<>();
       list.add("Mango");
       list.add("Olma");
       list.add("Banan");
       list.add("Uzum");
       for(String fruit:list)
           System.out.println(fruit);
   }
}

LinkedList - bog’langan ro’yxat bo’lib, u AbstractList classidan meros oladi va Deque va List interfeyslarini implementatsiya qiladi. Quyidagi mulohazalarni eslab qolishga harakat qiling:

  • U dublikat elementlardan iborat bo’lishi mumkin.
  • U elementlar qo’shilish tartibini saqlaydi.
  • U sinxronlashmagan.
  • Unda manipulyatsiya tezroq, chunki elementlar o’z o’rnini o’zgartirmaydi.

LinkedList classida 2 ta konstruktor bor:

  • LinkedList() - bo’sh ro’yxat yaratadi.
  • LinkedList(Collection<? extends E> c) - berilgan to’plam elementlaridan tashkil topgan linkedlist yaratadi.

Java dasturlash tilida LinkedList classi ArrayList classining ko’plab metodlarga o’xshash metodlarga ega. Shuningdek, unda bir qancha o’ziga xos metodlar mavjud:

  • E getFirst() - listning birinchi elementini qaytaradi.
  • E getLast() - listning oxirgi elementini qaytaradi.
  • boolean offer(E e) - berilgan elementni listning oxirgi elementi sifatida qo’shadi.
  • boolean offerFirst(E e) - listning boshiga berilgan elementni qo’shadi.
  • boolean offerLast(E e) - listning oxiriga berilgan elementni qo’shadi.
  • E peek() - listning birinchi elementini qaytaradi.
  • E peekFirst() - listning birinchi elementini qaytaradi yoki list bo’sh bo’lsa null qaytaradi.
  • E peekLast() - listning oxirgi elementini qaytaradi yoki list bo’sh bo’lsa null qaytaradi.
  • E poll() - listning birinchi elementi qaytaradi va uni listdan o’chiradi.
  • E pollFirst() - listning birinchi elementi qaytaradi va uni listdan o’chiradi, yoki list bo’sh bo’lsa null qaytaradi.
  • E pollLast() - listning oxirgi elementi qaytaradi va uni listdan o’chiradi, yoki list bo’sh bo’lsa null qaytaradi.

Quyidagi misolda LinkedList ga doir kod yozamiz.

import java.util.*;
public class LinkedListMisol {
   public static void main(String args[]) {
       LinkedList<String> list = new LinkedList<String>();
       list.add("uzbekdevs.uz");
       list.add("blogpost.uz");
       list.add("google.com");
       list.add("wikipedia.com");

       Iterator<String> itr = list.iterator();
       while (itr.hasNext()) {
           System.out.println(itr.next());
       }
   }
}