Programlama dünyasına adım attığınızda, verileri değişkenler içinde saklamayı öğrenirsiniz. Ancak, aynı türden onlarca, yüzlerce veya binlerce veriyi saklamanız gerektiğinde ne olacak? Örneğin, bir sınıftaki 100 öğrencinin notlarını kaydetmek istediğinizde 100 farklı değişken (not1, not2, …, not100) tanımlamak hem mantıksız hem de yönetilemez bir durumdur. İşte bu gibi durumlarda imdadımıza diziler (arrays) yetişir.
Bu yazımızda, Java programlama dilinin en temel ve en önemli veri yapılarından biri olan dizileri, yeni başlayanların kolayca anlayabileceği örneklerle inceleyeceğiz.
1. Java’da Dizi (Array) Nedir?
Bir dizi, aynı veri tipine (base type) sahip birden fazla değişkeni ortak bir isim altında gruplayarak saklamamızı sağlayan bir veri yapısıdır. Java’da diziler içindeki ögeler her zaman sıfırdan başlanarak numaralandırılır. Bir dizinin içinde tutacağı ögelerin tipi (örneğin tamsayı, ondalıklı sayı, metin) önceden belirlenir ve bir dizi yalnızca bu belirlenmiş tipteki verileri saklayabilir.
Java’da diziler, C veya C++ gibi dillerden farklı olarak arka planda birer nesne (object) olarak uygulanır. Bu özellikleri sayesinde diziler, onlarla çalışmamızı kolaylaştıran çeşitli dahili yeteneklere sahiptir.
2. Dizi Tanımlama ve Bellekte Oluşturma
Java’da bir dizi kullanabilmek için iki adımlı bir süreç izlenir: Önce dizinin referans değişkeni tanımlanır, ardından new anahtar kelimesi ile dizinin bellekteki fiziksel alanı (boyutu) ayrılır.
Sözdizimi (Syntax):
veri_tipi[] diziAdi; // Değişken tanımlaması
diziAdi = new veri_tipi[boyut]; // Bellek tahsisi
Not: Java’da köşeli parantezlerin değişken adından sonra yazıldığı (veri_tipi diziAdi[];) alternatif bir kullanım da vardır ancak veri tipini netleştirdiği için köşeli parantezlerin veri tipinden hemen sonra yazılması daha çok tercih edilir.
Örnek:
int[] ogrenciNotlari;
ogrenciNotlari = new int; // 5 adet tamsayı tutacak dizi
Bu işlem tek satırda da yapılabilir:
int[] ogrenciNotlari = new int;
Varsayılan (Default) Değerler: new anahtar kelimesi ile bir dizi oluşturduğunuzda, Java bu dizinin içindeki tüm elemanlara otomatik olarak başlangıç değerleri atar. Sayısal tipler için bu değer 0, mantıksal (boolean) tipler için false ve referans (nesne) tipleri için null‘dır.
3. Dizi Elemanlarına Değer Atama ve Erişim
Dizilerin içindeki her bir alana “eleman” denir ve bu elemanlara indis (index) adı verilen numaralarla erişilir. Java’da dizilerin ilk elemanının indisi her zaman 0’dır. Dolayısıyla N elemanlı bir dizinin son elemanının indisi N - 1 olur.
int[] aylar = new int; // 12 elemanlı dizi
aylar = 31; // Ocak ayı (Dizinin 1. elemanı, indisi 0)
aylar = 28; // Şubat ayı (Dizinin 2. elemanı, indisi 1)
aylar = 31; // Mart ayı
System.out.println("Mart ayının gün sayısı: " + aylar);
Kısa Yoldan Dizi Oluşturma (Array Initializer): Eğer dizinin içine koyacağınız elemanları en başından biliyorsanız, new kelimesini kullanmadan, elemanları süslü parantezler {} arasına yazarak diziyi oluşturabilir ve başlatabilirsiniz.
int[] aylar = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Bu yöntemde dizinin boyutu, süslü parantezler arasına yazdığınız eleman sayısına bakılarak Java tarafından otomatik olarak belirlenir.
4. Dizi Uzunluğunu Bulma: length Özelliği
Bir kez boyutlandırılarak oluşturulan bir dizinin kapasitesi (eleman sayısı) daha sonradan değiştirilemez. Ancak program kodlarken bir dizinin uzunluğunu bilmeniz gerekebilir. Java’da diziler birer nesne olduğu için length adında bir özellik (instance variable) barındırırlar. Bu özellik her zaman dizinin tutabileceği eleman sayısını verir.
int[] sayilar = new int;
System.out.println("Dizinin uzunluğu: " + sayilar.length);
// Çıktı: Dizinin uzunluğu: 10
5. Dizilerde Döngü Kullanımı
Diziler, içerdikleri elemanları sırayla işlemek için döngülerle, özellikle de for döngüsü ile birlikte mükemmel bir uyum içinde çalışırlar.
Standart for Döngüsü ile Kullanım:
int[] sayilar = {10, 20, 30, 40, 50};
int toplam = 0;
for (int i = 0; i < sayilar.length; i++) {
toplam = toplam + sayilar[i];
}
System.out.println("Sayıların toplamı: " + toplam);
Gelişmiş for-each Döngüsü: JDK 5 ile birlikte Java, diziler (ve diğer koleksiyonlar) üzerinde gezinmeyi son derece basitleştiren for-each döngüsünü dile eklemiştir. Bu döngü yapısı, bir dizinin başından sonuna kadar tüm elemanları otomatik olarak tek tek dolaşır. Dizi indeksleriyle uğraşma zorunluluğunu ortadan kaldırır.
int[] sayilar = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int toplam = 0;
for (int x : sayilar) {
toplam += x;
}
System.out.println("Toplam: " + toplam);
Yukarıdaki örnekte x değişkeni sırasıyla dizideki 1, 2, 3... değerlerini alır ve indeks hatalarını (boundary errors) tamamen önler.
6. Çok Boyutlu Diziler (Matrisler)
Java’da çok boyutlu diziler aslında “dizilerin dizisi” (arrays of arrays) mantığıyla çalışır. İki boyutlu bir dizi tanımlamak için iki adet köşeli parantez [][] kullanılır. Gündelik hayatta iki boyutlu dizileri bir satır ve sütunlardan oluşan Excel tablosu veya matris gibi düşünebiliriz.
int[][] matris = new int; // 3 satır, 4 sütundan oluşan matris
Bu kod, 3 adet dizi içeren bir ana dizi yaratır ve her bir alt dizinin 4 elemanı vardır. Değer ataması şu şekilde yapılır:
matris = 10; // 1. satır, 1. sütun
matris = 99; // 3. satır, 4. sütun
Çok boyutlu diziler de başlangıç değerleriyle oluşturulabilir. Her satır kendi süslü parantezi içinde tanımlanır:
int[][] tablo = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Gelişmiş İpucu: Java’da çok boyutlu diziler, dizilerin dizisi olduğu için, isterseniz satırların sütun sayıları birbirinden farklı olabilir. Buna “düzensiz diziler” (irregular arrays) adı verilir.
7. Dizilerde Kopyalama ve Sık Yapılan Hatalar
Dizileri Kopyalamak: Eğer bir dizinin aynısından başka bir tane oluşturmak istiyorsanız, basitçe B = A yazmak işe yaramaz. Bu sadece referansı kopyalar, yeni bir dizi yaratmaz. Doğru kopyalama işlemi için Java’nın gömülü System.arraycopy() metodunu kullanabilirsiniz.
double[] A = {1.1, 2.2, 3.3};
double[] B = new double[A.length];
System.arraycopy(A, 0, B, 0, A.length);
Dikkat Edilmesi Gereken Ölümcül Hata: ArrayIndexOutOfBoundsException Java programcılarının dizilerle çalışırken en çok karşılaştığı hata “Array Index Out of Bounds” (Dizi Sınırlarının Dışına Çıkma) hatasıdır. Java çalışma zamanı sistemi (runtime), dizilere erişirken girdiğiniz indeksin geçerli olup olmadığını sıkı bir şekilde denetler.
Örneğin 5 elemanlı bir dizide son indeks 4’tür. Siz programda 5. indekse erişmeye çalışırsanız, Java programın çökmesini önlemek (veya güvenlik açığı oluşturmamak) için ArrayIndexOutOfBoundsException fırlatır.
Sonuç: Java’da diziler (arrays), aynı tipteki verileri sistematik bir biçimde depolamanın ve yönetmenin en hızlı yoludur. Hem tek boyutlu listeler hem de karmaşık çok boyutlu matrisler kurmamıza olanak tanıyan bu yapılar, yazılım dünyasında inşa edeceğiniz her algoritmanın temelini oluşturur. Döngülerle harmanladığınızda ve length gibi özelliklerinden yararlandığınızda diziler, veri yığınlarını yönetmek için en güçlü silahınız olacaktır!






