Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.
Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin. Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Java ArrayList vs LinkedList

+5 ovoz
281 marta ko‘rilgan
so‘radi 26 dekabr, 16 Axrorxo'ja (743 bal)
Javada qanday holatlarda ArrayList qanday holatlarda LinkedList ishlatgan maqul

3 Javoblar

+4 ovoz
javob berdi 01 fevral, 17 Gayratjon (408 bal)
tanlangan 02 fevral, 17 vejon
 
Eng yaxshi javob

ArraList va LinkedList'lar orasidagi bazi bir farqlar

ArrayList va LinkedList orasida unchalik farqlar ko'p emas. 

1. Qidirish: ArrayListda qidirish jarayoni LinkedList'ga qaraganda tez amalga oshiriladi. ArrayListda qidiruv davomiyligi O(1) LinkeList'da esa O(n) ga teng.

Tarif: ArrayList da elementlar uchun index lar biriktrilgan ma'lumotlarni saqlash strukturasida massivdan foydalanganligi uchun ArrayListda qidiruv tez amalga oshiriladi. LinkedListda esa elementlar joylashuvi boshqacha u doubly linked listni implement qiladi. Shuning uchun qidirilayotgan elementni hamma elementlar ichidan qidiradi.

2. O'chirish: LinkedList da o'chirishni amalga oshirilishi O(1) ga teng ArrayListda esa o'chirilishni bajarilishi O(n) ga teng.

LinkedList da o'chirish ArrayListga nisbatan tezroq amalga oshadi.

Ta'rif: LinkedList elementlarida ikkita nuqta mavjud ya'ni elementning qo'shnilari o'zidan oldigi va keyingi element o'chirilsa, faqat shu qo'shnilarini joylashuvi o'zgaradi xolos. ArrayListda esa element o'chirilgandan keyin barcha elementlarga index'lar boshqatdan beriladi ya'ni har bir elementni boshqa index ga ko'chrib o'tish jarayoni bajariladi.

3. Ma'lumot yozish: LinkedList da add funksiyasini bajarilishi O(1) teng ArrayListda esa bu holat O(n) ga teng. Yozish jarayoni o'chirish jarayonida bo'ladigan amallar bajariladi.

Qisqacha qilib aytganda ArrayList ma'lumotlarni saqlash va qidirishga LinkedList esa ma'lumotlarni qayta ishlashga yaxshidir.

ArrayList va LinkedList lardan qachon foydalaniladi.

Yuqoridagi ta'riflarda aytib o'tilganidek yozish va o'chirishda LinkedList ArrayListga qaraganda ancha tez amalga oshiriladi. Ma'lumot o'chirib yozishda eng yaxshi tanlov bu LinkedList hisoblanadi.

Qidirish jarayoni ArrayList'da Linkedlistga qaraganda tezroq amalga oshiriladi. Shuning uchun qidirish jarayoni amalga oshirilganda ArrayList eng yaxshi tanlovdir.

+4 ovoz
javob berdi 26 dekabr, 16 Unknown (802 bal)

Quyida shu bo'yicha UzbekDevelopers guruhidan shu LinkedList va ArrayList bo'yicha (09.07.16 sanadagi)tortishuvlarni keltiramiz. O'qib o'zingiz xulosa qilib olarsiz.

Odatda ArrayList ishlatgan ma'qul ekan.

LinkedListni deyarli hech qayerda ishlatilmaydi. Hatto Стэк larni amalga oshirishda ham.O'rniga Dynamic(Динамический) massiv ishlatish maslahat beriladi.


LinkedList qo'shish(add) uchun har doim xotiradan joy ajratar(memory allocate) ekan. Lekin ArrayList qachon massiv(array) to'lsa ko'chirar ekan. Men ham kitobdan o'qiganim bo'yicha o'ylab yurgan ekanman.


Lekin:
Masalan: siz qancha obyekt yaratilishini oldindan bilmaysiz deylik, agar array ishlatmochi bo'lsangiz, kodning boshida arrayni 100 sig'im bilan yaratib oldiz, lekin kodning davomida 101-elelment yaratildi, nima qilasiz, massiv(array)ni kengaytirasiz. Odatda boshqa massivga ko'chirib o'tasiz, LinkedListda bunaqa muammo yo'q, boshiga yoki oxiriga qo'shib ketaverasiz. Adashmasam, List<> ning tagida ham LinkedList yotibti. 

Yana tasavvur qiling sizda 10 millionta elementlik massivingiz bor, ya`ni ArrayList. o`rtasiga 5000 ta qo'shish(insert) kerak bo`lsa ArrayList ancha qiynalib qoladi.

Shu taraflardan  LinkedListlarning o'rni haligacha muhim.

izoh qoldirdi 26 dekabr, 16 Unknown (802 bal)
(Davomi:) ArrayList va LinkedList haqida tortishuvilarni oqidim. Ozim ishonch xosil qilish uchun yozib kordim.
import java.util.*;

public class BenchmarkList {
    public static void main(String[] args) {

        System.out.println("building");
        List array = build(10_000_000L, new ArrayList());
        List link = build(10_000_000L, new LinkedList());
        System.out.println();

        System.out.println("size of "+link.getClass().getSimpleName()+"="+link.size());
        System.out.println("size of "+array.getClass().getSimpleName()+"="+array.size());
        System.out.println();

        System.out.println("iteration");
        iteration(array);
        iteration(link);
        System.out.println();

        System.out.println("getting");
        get(array);
        get(link);
        System.out.println();

        System.out.println("inserting");
        insert(array);
        insert(link);
        System.out.println();

        System.out.println("removing");
        remove(array);
        remove(link);
        System.out.println();
    }

    static List build(long n, List list) {
        long l = System.currentTimeMillis();

        long i = 0;
        while (true){
            if(++i>n) break;
            list.add(new Object());
        }

        System.out.println(list.getClass().getSimpleName() + "; time="+(System.currentTimeMillis()-l)+"ms");

        return list;
    }

    static void iteration(List list){
        long l = System.currentTimeMillis();
        for(Object element: list){
            System.out.print(""); // if there nothing, jvm will skip this block;
        }
        System.out.println(list.getClass().getSimpleName() + "; time="+(System.currentTimeMillis()-l)+"ms");
    }

    static void insert(List list){
        long l = System.currentTimeMillis();
        list.add(1000, new Object());
        list.add(5000, new Object());
        list.add(500, new Object());
        list.add(200, new Object());
        list.add(8_000, new Object());
        list.add(10_000, new Object());
        list.add(50_000, new Object());
        list.add(200_000, new Object());
        list.add(500_000, new Object());
        list.add(1500_000, new Object());
        System.out.println(list.getClass().getSimpleName() + "; time="+(System.currentTimeMillis()-l)+"ms");
    }

    static void get(List list){
        long l = System.currentTimeMillis();
        Object element = list.get(1000);
        element = list.get(5000);
        element = list.get(50_000);
        element = list.get(8_000);
        element = list.get(100_000);
        element = list.get(500_000);
        element = list.get(50_000);
        element = list.get(80_000);
        element = list.get(30_000);
        element = list.get(10_000);
        element = list.get(2_000);
        element = list.get(200_000);
        element = list.get(500_000);
        element = list.get(900_000);
        element = list.get(7_000);
        element = list.get(260_000);

        System.out.println(list.getClass().getSimpleName() + "; time="+(System.currentTimeMillis()-l)+"ms");
    }

    static void remove(List list){
        long l = System.currentTimeMillis();
        list.remove(2000);
        list.remove(5000);
        list.remove(600);
        list.remove(700);
        list.remove(7000);
        list.remove(8_000);
        list.remove(20_000);
        list.remove(60_000);
        list.remove(300_000);
        list.remove(600_000);
        System.out.println(list.getClass().getSimpleName() + "; time="+(System.currentTimeMillis()-l)+"ms");
    }
}
izoh qoldirdi 26 dekabr, 16 Unknown (802 bal)
Natija:

building
ArrayList; time=279ms
LinkedList; time=2406ms

size of LinkedList=10000000
size of ArrayList=10000000

iteration
ArrayList; time=696ms
LinkedList; time=593ms

getting
ArrayList; time=0ms
LinkedList; time=24ms

inserting
ArrayList; time=40ms
LinkedList; time=19ms

removing
ArrayList; time=44ms
LinkedList; time=8ms
+3 ovoz
javob berdi 27 dekabr, 16 Axrorxo'ja (743 bal)

Arraylist index bo'yicha ishlaydi yani n -1 element n - 2 element bn yonma yon turadi,Linkedlist esa link bo'yicha ishlaydi bunda elementlar yonma yon turishi shart emas.Ishlatilish prinsipi ham shunga mutanosib bo'lishi kerak yani o'chirish qo'shish uchun linked list qulay...,lekin aynan nega arraylistning tez ishlashi mana shu rasmda yaxshi chunish mumkin,memory model da L1,L2,L3 cache lar doim hozir ishlatilib turgan baytdan keyingi ma'lumotlarni keshlab oladi tezroq o'qib olish uchun shuning uchun ular index bo'yicha tez ishlaydi,random bo'yicha ancha sekin 

Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.

Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin.

Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Telegram kanal YordamUzRss

...