1. Nasıl ArrayList
yapı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ı ArrayList
basit ve ustaca. Her ArrayList
nesne iki alan içerir:
- Bir dizi öğe
size
Listedeki eleman sayısını saklayan bir değişken
Dahili olarak, bir ArrayList
nesne ç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 size
0'dır.
Listeye bir eleman eklerseniz, dizinin 0. hücresinde saklanır ve size
1'e yükselir.
Bir eleman daha eklerseniz, 1. hücrede depolanacak ve size
tekrar 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ı ( data
dizi) 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 Integer
nedenle 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 ArrayList
dahili dizisine değiştirin):
Adım 4 — Başarmak için çok çalıştığımız yeni numarayı ekleyin:
GO TO FULL VERSION