Array List ile Linked List arasındaki fark Fark

Anonim

Veriler Nasıl Saklanır?

Array listesi ve Bağlantılı liste, veri saklama ve alma konusunda yaygın olarak kullanılan terimlerdir. Nihayetinde çok sayıda depolama aygıtı mevcut olsa da depolama mekanizmasına bağlı. Bu iki depolama mekanizması, verilerinizi depolama aygıtlarına yerleştirir ve gerektiğinde geri getirir. Şimdi kendi belleklerine nasıl veri depoladıklarına bir göz atalım. Dizi listesi sıralı bir saklama alanı kullanır ve veri parçaları birbiri ardına depolanır. Bu belki de daha basit bir depolama şeklidir - karışıklığı önler. Evet, bir sonraki öğeyi veya verileri dizi listesinin bir sonraki bellek konumundan alabiliriz; Ancak, Bağlantılı listede işaretçilerin yardımıyla saklanır. Depolama için bir tane veri, diğeri işaretçi için olmak üzere iki hafıza konumuna ihtiyacımız var. Bir işaretçi bir sonraki verinin bellek konumunu belirtir. Bağlantılı Liste'nin verilerin sırayla saklanmadığını kolayca anlayabiliriz; Bunun yerine, rastgele bir depolama mekanizması kullanır. İşaretçiler, veri konumlarını belleğe yerleştirmenin anahtar öğeleridir.

Dinamik Dizileme ve Bağlantılı Liste

Her iki depolama mekanizmasının nasıl veri koyduğunu ve Array listesinin dahili depolama düzeni için bir 'dinamik dizi' terimi verebileceğimizi tartıştık. Bağlantılı liste, bir sonraki öğeyi izlemek için işaretçilerin yardımıyla dahili bir liste kullanırken, sadece veri parçalarını birbiri ardına sırayla isimlendirir; Bu nedenle, bize bir sonraki verileri göstermek için tekli veya çift bağlantılı bir liste gibi iç bağlantılı bir liste kullanır.

Bellek Kullanımı

Dizi listesi yalnızca gerçek verileri saklarken, sadece sakladığımız veriler için alana ihtiyacımız vardır. Bunun tersine, Bağlantılılar listesinde de işaretçiler kullanırız. Bu nedenle, iki bellek yeri gereklidir ve bağlantılı listenin Dizi listesinden daha fazla bellek tüketdiğini söyleyebiliriz. Bağlantılı liste'nin avantajlı bir yanı, Array listesine değil, verilerimizi depolamak için sürekli bellek konumları gerektirmediğidir. İşaretçiler bir sonraki veri konumunun konumunu tutabilir ve sürekli olmayan daha küçük bellek yuvalarını da kullanabiliriz. Bellek kullanımı söz konusu olduğunda, İşaretçiler Bağlantılı listede ana rolü oynamakta ve dolayısıyla işaretçiler etkinliğini de etkiliyor.

Başlangıç ​​Dizisi Listesi ve Bağlı Liste Boyutu

Dizi listesiyle, boş bir liste bile 10 boyutunu gerektirir, ancak Bağlantılı bir liste ile böyle büyük bir boşluğa ihtiyacımız yoktur. 0 Boyutlu boş bir Bağlı liste oluşturabiliriz. Daha sonra, boyutunu gerektiği gibi artırabiliriz.

Veri Alma

Artalan olarak depolarken Veri erişimi Array listesinde daha kolaydır. Tek yaptığı ilk veri konumunu belirlemek; geri kalanını almak için oradan bir sonraki konuma sıralı olarak erişilir.İlk veri konumu + 'n' gibi hesaplanır, burada 'n' Array listesindeki verilerin sırasıdır. Bağlantılı liste, ilk veri konumunu bulmak için başlangıç ​​işaretçisine atıfta bulunur ve buradan sonraki veri konumunu bulmak için her bir veriyle ilişkili işaretçiyi gösterir. Alma süreci esas olarak buradaki işaretçilere bağımlıdır ve bize bir sonraki veri konumunu etkili bir şekilde gösterirler.

Veri Sonu

Dizili liste, verilerin sonunu işaretlemek için bir boş değer kullanır; buna karşın Bağlı liste, bu amaç için boş gösterici kullanır. Sistem null verileri tanır fark etmez, Dizi listesi bir sonraki veri alımını durdurur. Benzer şekilde boş gösterici, sistemi sonraki veri erişimine geçmesini önler.

Ters Traversal

Linked listesi, descendingiterator () yardımıyla ters yönde geçmemizi sağlar. Bununla birlikte, bir Array listesinde böyle bir tesise sahip değiliz - burada tersine çaprazlama bir sorun haline geliyor.

Sözdizimi

Her iki depolama mekanizmasının Java Sözdizimini inceleyelim.

Dizi listesi oluşturma:

Liste arraylistsample = new ArrayList ();

Array Listesine nesneler ekleme:

Arraylistsample. (the “isim1”);

Arraylistsample. (the “ad2”);

Sonuç dizisi Array listesine nasıl benzeyecektir - [name1, name2].

Bağlantılı liste oluşturma:

List linkedlistsample = yeni linkedList ();

Bağlı Listeye nesneler ekleme:

Linkedlistsample. (the “NAME3”);

Linkedlistsample. (the “NAME4”);

Sonuçta ortaya çıkan Bağlantılı Liste şöyle görünür: - [isim3, isim4].

Alma veya Arama İşlemi için Hangisi Daha İyi?

Bağlı liste, n inci veri aramasında u O (n) alırken, Dizi listesi herhangi bir veri aramasını çalıştırmak için O (1) süre alır. Bu nedenle, bir Dizi listesi her zaman herhangi bir veri aramasında sabit bir süre kullanır, ancak Bağlı listede, alınan süre, verilerin konumuna bağlıdır. Bu nedenle, Array listeleri Get veya Search işlemleri için her zaman daha iyi bir seçimdir.

Ekleme veya Toplama İşlemi için Hangisi Daha İyidir?

Her iki Dizi listesi ve Bağlantılı Liste, veri eklenmesi için O (1) süre alır. Ancak dizi doluysa, Array listesinin boyutunu değiştirmek ve öğeleri yenisine kopyalamak için oldukça zaman gerekir. Böyle bir durumda, Bağlantılı liste daha iyi bir seçimdir.

Kaldırma İşlemi İçin Hangisi Daha İyi?

Kaldır işlemi, Dizi listesinde ve Bağlantılı listede hemen hemen aynı sürede gerçekleşir. Dizi listesinde, bu işlem veri siler ve daha sonra yeni diziyi oluşturmak için verinin konumunu değiştirir - O (n) zaman alır. Bağlantılı listede, bu işlem belirli verilere gider ve yeni listeyi oluşturmak için işaretçi konumlarını değiştirir. Çapraz geçiş ve çıkarma zamanı burada da O (n) 'dır.

Hangi Daha Hızlı?

Bir Array listesinin gerçek verileri saklamak için dahili bir dizi kullandığını biliyoruz. Bu nedenle, herhangi bir veri silinirse, önümüzdeki tüm verilerin bir bellek kayması olması gerekir.Açıkçası, bunun için önemli bir süre gerekiyor ve işleri yavaşlatıyor. Böyle bir bellek kayması, Bağlı listede gerekli değildir çünkü işaretçi konumu değiştirilmiştir. Bu nedenle, Bağlı bir liste herhangi bir veri depolama alanındaki bir Dizi listesinden daha hızlıdır. Bununla birlikte, bu tamamen operasyon türüne bağımlıdır, e. Alın veya Arama işlemi için Bağlantılı liste bir Array listesinden çok daha fazla zaman alır. Genel performansa baktığımızda Linked listesinin daha hızlı olduğunu söyleyebiliriz.

Dizi Listesini ve Bağlantılı Listeyi Ne Zaman Kullanalım?

Dizi listesi, sürekli bellek bulunan daha küçük veri gereksinimleri için en uygun olanıdır. Ancak çok miktarda veriyle uğraştığımızda, sürekli bellek kapasitesi küçük veya büyük olmak üzere veri depolama mekanizmalarını uygular. Ardından, hangisini seçeceğinize karar verin - Dizi listesi veya Bağlantılı liste. Verilerin depolanması ve alınması gerektiğinde, bir dizi listesi ile devam edebilirsiniz. Fakat bir liste, veriyi manipüle ederek bunun ötesinde size yardımcı olabilir. Veri işleme işleminin ne sıklıkla yapılması gerektiğine karar verdikten sonra, genellikle ne tür veri alım işlemlerini gerçekleştirdiğinizi kontrol etmek önemlidir. Sadece Get veya Search olduğunda, Array List (Array Listesi) daha iyi bir seçimdir; Ekleme veya Silme gibi diğer işlemler için Bağlantılı liste ile devam edin.

Tabular biçimdeki farklılıklara bir göz atalım.

S. Kavramlar Farklılıklar
Array List Bağlı Liste
1 Veri Depolama Modası Sıralı veri saklama alanı kullanır Sıralı olmayan veri saklama alanı kullanır
2 < Dahili Dinamik Diziyi korur Bağlantılı bir listeyi korur 3
Bellek Kullanımı Sadece veri için bellek alanı gerektirir Veriler için de bellek alanı gerektirir işaretçiler 4
İlk Listenin Boyutu En az 10 öğe için alana ihtiyaç duyar Boş alana ihtiyaç duymaz ve boyut 0'un boş Bağlı bir listesini bile oluşturabiliriz. 5
Veri Alma İlk veri konumu + 'n' gibi hesaplar, burada 'n' Array listesindeki verilerin sırasıdır Gerekli veriye kadar ilk veya sondan gelen çapraz geçiş gereklidir 6 < Veri Sonu
Boşluk değerleri sonunu işaretler Boş İşaretçi sonunu işaretler 7 Ters Traversal
İzin vermiyor Azalan yazar () 8 Liste Oluşturma Sözdizimi
Liste arraylistsample = new Array Liste (); Listele linkedlistsample = yeni linkedList (); 9

Nesneler Ekleme

Dizi örnekleri. (the “isim1”); Linkedlistsample. (the “NAME3”); 10

Alın veya Ara

O (1) sürer ve performansı artırır O (n) süresini alır ve performans, verilerin konumuna bağlıdır 11
Dizinin dolu olduğu sürece O (1) zamanı tüketir Her koşulda O (1) süre tüketir 12 Silme veya Kaldırma
O (n) zaman alır < O (n) süreci alıyor 13 Ne Zaman Kullanmalı? Çok sayıda Get veya Search işlemi söz konusuysa; başlangıçta dahi bellek kullanılabilirliği daha yüksek olmalıdır
Birçok Ekleme veya Silme işlemi olduğunda ve bellek kullanılabilirliğinin sürekli olması gerekmez