1) Temel Veri Yapısı
ArrayList ve LinkedList arasındaki ilk fark, ArrayList'in Array tarafından desteklenirken, LinkedList LinkedList tarafından desteklenir. Bu, performansta daha fazla farklılığa yol açacaktır.
2) LinkedList Deque uygular
ArrayList ve LinkedList arasındaki bir diğer fark, LinkedList, List arabirimi dışında, add () ve poll () ve diğer birkaç Deque işlevi için ilk giren ilk işlemleri sağlayan Deque arabirimini de uygular. 3) ArrayList öğelerine öğe ekleme ArrayList öğesinde öğe ekleme, Array öğesinin yeniden boyutunu tetiklemezse O (1) işlemidir, bu durumda O (log (n)) olur, Öte yandan, LinkedList, herhangi bir navigasyon gerektirmediği için O (1) işlemidir.
4) Bir elemanın bir konumdan çıkarılması
Belirli bir dizinden bir öğeyi kaldırmak için örneğin remove (index) öğesini çağırmak üzere, ArrayList, O (n) 'ye yakın hale getiren bir kopyalama işlemi gerçekleştirirken, LinkedList'in de O (n / 2) yapan o noktaya geçmesi gerekir. , yakınlığa dayalı olarak her iki yönden de hareket edebildiği için.
5) ArrayList veya LinkedList üzerinden yineleme
Yineleme, LinkedList ve ArrayList için O (n) işlemidir; burada n, bir dizi öğedir.
6) Elemanın bir konumdan alınması
Get (index) işlemi ArrayList'te O (1) iken LinkedList'teki O (n / 2), bu girişe kadar geçiş yapması gerekir. Yine de, Büyük O gösterimlerinde O (n / 2) sadece O (n) 'dir çünkü orada sabitleri görmezden geliriz.
7) Bellek
LinkedList, veriyi saklamak için statik iç içe bir sınıf ve sonraki ve önceki iki düğüm olan bir sargı nesnesi olan Entry'yi kullanırken ArrayList, verileri yalnızca Array'da depolar.
Bu nedenle, ArrayList durumunda ArrayList söz konusu olduğunda, Array öğesinin içeriği bir Array öğesinden diğerine kopyalarken yeniden boyutlandırma işlemini gerçekleştirmesi durumu haricinde, bellek gereksinimi LinkedList'ten daha az görünür.
Dizi yeterince büyükse, bu noktada çok fazla bellek alabilir ve Çöp toplamayı tetikleyebilir, bu da yanıt süresini yavaşlatabilir.
ArrayList ile LinkedList arasındaki yukarıdaki tüm farklardan, ArrayList, remove () veya get () 'den daha sık bir add () işlemi yapmanız dışında hemen hemen tüm durumlarda LinkedList'ten daha iyi bir seçimdir.
Bağlantılı listeyi ArrayList'e göre değiştirmek daha kolaydır, özellikle de bağlantılı listeyi başlangıç veya bitişten ekliyorsanız veya kaldırıyorsanız, bağlantılı liste dahili olarak bu konumların referanslarını tutar ve bunlara O (1) zamanda erişilebilir.
Başka bir deyişle, eleman eklemek istediğiniz konuma ulaşmak için bağlantılı listede gezinmenize gerek yoktur, bu durumda ekleme O (n) işlemi haline gelir. Örneğin, bağlı listenin ortasına bir öğe ekleme veya silme.
Bence Java'daki pratik amaçların çoğu için LinkedList üzerinden ArrayList kullanın.