1. Nasıl ArrayListyapılandırılır ?
ArrayListöğeleri depolamak için en yaygın olarak kullanılan Java sınıfıdır. Peki nasıl ArrayListçalışıyor ve neden herkes bundan bu kadar hoşlanıyor?
Yapısı ArrayListbasit ve ustaca. Her ArrayListnesne iki alan içerir:
- Bir dizi öğe
sizeListedeki eleman sayısını saklayan bir değişken
Dahili olarak, bir ArrayListnesne çok sıradan bir dizi içerir! Ama hepsi bu kadar değil. Listenin uzunluğunu saklayan bir boyut değişkeni de vardır . Bu nasıl çalışır:
Başlangıçta, liste içindeki dizinin uzunluğu 10'dur ve değişken size0'dır.
Listeye bir eleman eklerseniz, dizinin 0. hücresinde saklanır ve size1'e yükselir.
Bir eleman daha eklerseniz, 1. hücrede depolanacak ve sizetekrar 1 artarak ikiye eşit olacaktır.
Dizide boşluk kalmadığında başka bir öğe eklerseniz, yöntemde aşağıdakiler gerçekleşir add():
- Bir öncekinin bir buçuk katı uzunluğunda yeni bir dizi oluşturulur.
- Eski dizinin tüm öğeleri yeni diziye kopyalanır.
- Nesnede
ArrayList, yeni diziye yapılan bir başvuru, eski diziye yapılan başvurunun yerini alır . - Geçirilen öğe , yeni dizinin 10. hücresine kaydedilir .
- Boyut değişkeni 1 artar ve şimdi 11'e eşit olur
Listenin ortasına bir öğe eklerken (eklerken) benzer bir şey olur. Mevcut elemanlar 1 sağa kaydırılır ve geçirilen eleman dizinin yeni serbest bırakılan hücresine yazılır.
Şimdi listeleri içeren en temel senaryoları ele alacağız:
2. Bir öğeye bir öğe eklemeArrayList
Öğeler eklendiğinde listenin içinde neler olduğuna bir göz atalım. Bir ArrayList nesnesi oluşturulduktan hemen sonra, bellekte şöyle bir şeye sahibiz:

ArrayListİki alan (iki değişken) içeren bir nesnemiz var : bir kapsayıcı ( datadizi) ve saklanan öğelerin sayısı ( size). Değişken data, 10 öğeyi saklayabilen bir kapsayıcıya (diziye) bir başvuru depolar.
5 sayısını diziye eklemeye karar verirsek aşağıdaki resmi elde ederiz:

Dizi artık 5 öğesini depolar ve size == 1.
Birisi şimdi size()nesnemizdeki yöntemi çağırırsa ArrayList, dönüş değeri listede depolanan öğe sayısı olacaktır: 1. Listedeki öğe sayısı, dizinin depolama kapasitesi ile aynı değildir.
Ne mevcut depolama kapasitesi ne de dizinin kendisi nesnenin dışında hiçbir zaman erişilebilir (görünür) olmayacaktır ArrayList. Bu, 'ın dahili verileridir ve her zaman öyle olacaktır ArrayList.
Listeye 7 sayı daha ekleyelim: 10, 20, 30, 40, 50, 60, 70.
Şimdi bellek şöyle görünecek:

Yöntemi şimdi çağırırsanız size(), listedeki yeni öğe sayısı olan 8 sayısını döndürür. Bu değerin dahili dizinin boyutuyla hiçbir ilgisi yoktur.
Bu resimde bir aşırı basitleştirme var.
Sınıf ArrayList, ilkel türleri depolayamaz, bu Integernedenle int. Kap, {5, 10, 20, 30, 40, 50, 60, 70} değerlerini doğrudan depolamaz, bunun yerine nesnelere yapılan başvuruları depolar Integer. Konteyner deposundaki tüm boş hücreler null.
3. Bir listenin uzunluğunu artırma
İç dizisinde boş hücre kalmadığında bir listenin içinde neler olduğuna bir göz atalım.
10 öğeden oluşan bir listemiz olduğunu varsayalım:

100 sayısını eklemeye karar veriyoruz . Yöntemde olan budur add():
Adım 1 — Yeni bir dizi oluşturun:

Adım 2 — Eski dizideki tüm öğeleri yeni diziye kopyalayın:

Adım 3 — Eski diziyi değiştirin (referansı nesnenin ArrayListdahili dizisine değiştirin):

Adım 4 — Başarmak için çok çalıştığımız yeni numarayı ekleyin:

GO TO FULL VERSION