1. Bellekteki diziler

Önceki örneklerde çizimler biraz hatalıydı.

Diziler oluşturulurken (dizeler oluşturulurken olduğu gibi), iki ayrı bellek bloğu tahsis edilir: biri dizinin ( kapsayıcı) kendisini depolamak için ve ikinci blok, adresini depolayan değişken için . Aşağıdaki resim bu açıklamayı temsil etmektedir:

Bellekteki diziler

Öğe dizisi için ayrılan 10 intbellek ve dizinin adresiniint[] saklayan değişken yeşil renkle gösterilir.int

Karşılaştırma için, intdeğeri depolayan sıradan bir değişken 199mavi renkle gösterilir.

Bu biraz dizeleri bellekte saklamayı anımsatıyor, sence de öyle değil mi?

Bu doğru, ipler. Tıpkı dizelerle çalışırken olduğu gibi, dizi değişkenlerini birbirinize atayabilirsiniz:

kod Açıklama
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Bir dizi 10 intöğe oluşturun. İndeksli hücreye
değer atayın . İndeksli hücreye değer atayın . Değişkende , değişkende saklanan adresi kaydedin . Şimdi ve bellekteki aynı dizi nesnesine işaret edin. Dizi nesnesinin indeksli hücresine , (değeri depolayan ) ve (değeri depolayan ) hücrelerde depolanan değerlerin toplamını yazın .42
97
ba
ab
92479

Dizi nesnesi olduğu yerde kalır ve ave bdeğişkenleri aynı adresi (referans) aynı nesneye depolar. Resme bak:

Bellek 2'deki diziler

2. Dizilerle çalışma hakkında daha fazla ayrıntı

Kesinlikle herhangi bir türden bir dizi öğe oluşturabilirsiniz. Bunu yapmak için, tip adından sonra köşeli parantezler yazmanız yeterlidir. Genel olarak, bir dizi oluşturmak şöyle görünür:

type[] name = new type[number];

type, dizide saklayacağımız öğelerin türüdür. Ad, diziye başvurmak için kullanacağımız değişkenin adıdır ve sayı , dizideki hücre sayısıdır.

Yukarıdaki örnek, bir dizi değişkeni ve dizi nesnesi oluşturmak için standart biçimdir. Gerçekte, bunlar iki ayrı varlıktır.

Bir dizi değişkenini bir dizi nesnesinden ayrı olarak oluşturabilirsiniz:

type[] name;
name = new type[number];

Ve önemsiz olmayan bir nokta daha:

İndeks dizisi ve dizi öğelerinin sayısı olarak değişkenleri ve hatta tüm ifadeleri kullanabilirsiniz .

Örnekler:

kod Açıklama
int n = 100;
int[] a = new int[n];
Bir dizi nöğe oluşturun
int n = 100;
int[] a = new int[n * 2 + 3];
203Öğelerle bir dizi oluşturun
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Önemli:
0..99Bu arada, dizi için var olmayan bir dizini kullanarak bir dizi hücresine erişmeye çalışırsanız (bizim örneğimizde bu, aralıkta olmayan herhangi bir tamsayı anlamına gelir ), programın bir hatayla çökeceğini bilmelisiniz. ArrayIndexOfBoundException, bu, dizinin dizinin sınırları dışında olduğu anlamına gelir.

3. Dizi uzunluğu

Önceki örnekte gördüğünüz gibi, kendi başına bir dizi değişkeni oluşturabilir ve daha sonra ona kodun herhangi bir yerinde bir değer (bir dizi nesnesine referans) atayabilirsiniz. Bunu bile yapabilirsiniz:

kod Açıklama
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Türü şu olan bir dizi değişkeni oluşturun: int[]
Değişken aküçükse 10,
o zaman bir öğeler dizisi oluşturun 10.
Aksi takdirde,
bir dizi 20öğe oluşturun

Ve şimdi böyle bir diziyle başka ne yapabilirsiniz? İçinde kaç tane element olduğunu nereden biliyorsun?

Buna yardımcı olmak için, dizilerin adında özel bir özelliği (değişkeni) vardır length. Bu ifadeyi kullanarak bir dizinin uzunluğunu bulabilirsiniz:

array.length;

İşte arraydizi değişkeninin adı ve lengthdizinin özelliğinin adı. Özelliğin değeri lengthdeğiştirilemez: lengthözelliğin kendisi diğer değişkenlere atanabilir, ancak ona hiçbir şey atanamaz (bunu yapmaya çalışırsanız, program derlenmeyecektir).

Bir önceki örnekle şu şekilde devam edebiliriz:

kod Açıklama
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Türü şu olan bir dizi değişkeni oluşturun: int[]
Değişken aküçükse 10,
o zaman bir öğeler dizisi oluşturun 10.
Aksi takdirde,
bir dizi 20öğe oluşturun
Dizinin tüm öğeleri üzerinde döngü yapın: baştan 0uzunluğaarray.length - 1

4. Java'daki diziler hakkındaki gerçeklerin özeti

Diziler hakkında bildiklerimizi özetleyelim:

Gerçek 1. Bir dizi birçok hücreden oluşur.

Gerçek 2. Belirli bir hücreye numarasını (dizin) kullanarak erişirsiniz.

Gerçek 3. Tüm hücreler aynı tiptedir.

Gerçek 4. Tüm hücrelerin başlangıç ​​değeri 0'dır (hücreler sayıları saklıyorsa), null(hücreler nesne referanslarını saklıyorsa) veya false(hücreler değerleri saklıyorsa boolean). Bu bölümde varsayılan değerler hakkında daha fazla bilgi edineceksiniz .

Gerçek 5. String[] list sadece bir değişkenin bildirimidir. Bu, kapsayıcının (dizi nesnesi) kendisini oluşturmaz. Değişkeni kullanmak için öncelikle bir dizi (container) oluşturmanız ve bunu değişkene atamanız gerekir. Aşağıdaki örneğe bakın.

Gerçek 6. Bir dizi nesnesi (kapsayıcı) oluşturduğumuzda, bunun ne kadar büyük olduğunu, yani kaç hücre içerdiğini belirtmeliyiz. Bu, şöyle bir ifade ile yapılır: new TypeName[n];

Gerçek 7. Bir dizinin uzunluğu özelliği kullanılarak bulunabilir .length.

Gerçek 8. Bir dizi oluşturduktan sonra, elemanlarının türünü veya sakladığı elemanların sayısını değiştiremezsiniz.

kod Açıklama
String s;
String[] list;
söyle null
list_null
list = new String[10];
int n = list.length;
Değişken list, bir nesneye referans depolar: 10öğelerden oluşan bir dizi dizisi.
ndır-dir10
list = new String[0];

Şimdi listbir dizi 0öğeyi ifade eder. Dizi var, ancak herhangi bir öğeyi depolayamaz.

list = null;
System.out.println(list[1]);
Bir istisna (program hatası) atılacak, yani program çökecek. listbir referansı saklarnull
list = new String[10];
System.out.println(list[10]);
Sınır dışı bir dizi istisnası (program hatası) üretilecek.
a elemanları/hücreleri listsaklıyorsa 10, geçerli indeksler şunlardır: 0 1 2 3 4 5 6 7 8 910elemanlar.