Yazılım geliştirme sürecinde verileri düzenli, erişilebilir ve mantıksal bir sıra içinde tutmak temel gereksinimlerden biridir. Bir sınıftaki otuz öğrencinin notlarını veya bir sistemdeki kullanıcı kimliklerini ayrı ayrı değişkenlerde tutmak yönetilemez bir karmaşıklığa yol açar. Java dizi yapısı, aynı türden birden fazla veriyi tek bir çatı altında toplamamızı ve bu verilere indeksler üzerinden hızlıca erişmemizi sağlayan en temel veri yapısıdır.
Java’da Dizi (Array) Nedir?
Java dilinde dizi, aynı veri tipine sahip sabit sayıda elemanı ardışık bellek bloklarında saklayan bir nesnedir (object). Diziler primitive (int, double, char gibi) veya referans (String, özel sınıflar) veri tiplerini barındırabilir.
Dizilerin üç temel karakteristik özelliği bulunmaktadır:
- Sabit boyutludur; bir dizi oluşturulurken boyutu belirlenir ve bu boyut çalışma zamanında değiştirilemez.
- Homojendir; bir dizi yalnızca tanımlandığı veri tipindeki elemanları kabul eder.
- Sıralıdır; her elemanın sıfırdan başlayan sayısal bir indeksi (index) bulunur.
Dizi Tanımlama ve Bellekte Başlatma (Initialization)
Java’da bir dizi tanımlamak için iki aşamalı bir süreç izlenebilir veya bu işlemler tek satırda birleştirilebilir. İlk aşama dizinin referansını bildirmek, ikinci aşama ise bellekte yer ayırmaktır (instantiation).
// 1. Tanımlama ve new anahtar kelimesi ile boyut belirtme
int[] sayilar = new int[5];
// 2. Tanımlama anında değer atama (Dizi başlatıcı)
String[] sehirler = {"Ankara", "İstanbul", "İzmir"};
İlk örnekte new int[5] ifadesi ile belleğin Heap alanında 5 adet tamsayı tutabilecek bir alan ayrılır. Java, bu alandaki elemanlara varsayılan değerleri otomatik olarak atar. Örneğin sayısal tipler için 0, boolean tipi için false, referans tipleri için ise null değeri atanır. İkinci örnekte ise dizinin boyutu belirtilen eleman sayısına (3) göre otomatik olarak ayarlanır.
Java’da köşeli parantezler değişken adından sonra da yazılabilir (int sayilar[]), ancak yaygın kabul gören ve okunabilirliği artıran standart int[] sayilar biçimidir.
Dizi Elemanlarına Erişim ve Değer Değiştirme
Dizi elemanlarına erişmek için indeks numarası köşeli parantezler içerisine yazılır. Dizilerin ilk elemanı her zaman 0 indeksine sahiptir. Son elemanın indeksi ise toplam eleman sayısının bir eksiğidir (boyut - 1).
int[] notlar = new int[3];
// Elemanlara değer atama
notlar[0] = 85;
notlar[1] = 90;
notlar[2] = 78;
// Eleman okuma
System.out.println("İlk not: " + notlar[0]);
System.out.println("Toplam eleman sayısı: " + notlar.length);
Yukarıdaki kod bloğunda notlar dizisinin ilk elemanına 85 değeri atanmış ve ekrana yazdırılmıştır. Bir dizinin uzunluğunu öğrenmek için dizinin yerleşik bir özelliği olan .length ifadesi kullanılır. Bu bir metot değil, bir değişkendir; bu nedenle parantez kullanılmaz.
Eğer var olmayan bir indekse erişmeye çalışırsanız (örneğin 3 elemanlı bir dizide notlar[5] yazarsanız), Java çalışma zamanında ArrayIndexOutOfBoundsException hatası fırlatır. Bu durum, sınır ihlali yapıldığını gösterir.
Döngüler ile Dizi Elemanlarını Gezmek
Diziler genellikle döngüler ile birlikte kullanılır. Java’da dizi taramak için klasik for döngüsü veya daha sade bir söz dizimi sunan geliştirilmiş for-each döngüsü tercih edilir.
Klasik for Döngüsü
İndeks numarasına ihtiyaç duyulan, elemanların sırasını değiştirmek veya belirli aralıklarda işlem yapmak gereken senaryolarda standart for döngüsü kullanılır.
int[] puanlar = {10, 20, 30, 40, 50};
for (int i = 0; i < puanlar.length; i++) {
System.out.println("İndeks " + i + ": " + puanlar[i]);
}
Bu yapıda sayaç değişkeni i, 0’dan başlayarak dizinin son indeksine kadar ilerler ve her adımda ilgili indisteki elemanı yazdırır.
Geliştirilmiş for-each Döngüsü
Yalnızca elemanları sırasıyla okumak istediğimiz durumlarda for-each döngüsü kodun daha temiz ve hatasız olmasını sağlar.
String[] diller = {"Java", "Python", "C++"};
for (String dil : diller) {
System.out.println("Programlama Dili: " + dil);
}
Bu döngü, dizinin başından sonuna kadar tüm elemanları sırayla dil isimli değişkene kopyalar. İndeks takibi gerektirmediği için sınır aşımı hatalarını tamamen ortadan kaldırır.
Çok Boyutlu Diziler (Multidimensional Arrays)
Java’da çok boyutlu diziler, aslında “dizilerin dizisi” olarak işlenir. En sık kullanılan çok boyutlu dizi türü iki boyutlu matrislerdir. İki boyutlu diziler satır ve sütun mantığıyla çalışır.
int[][] matris = {
{1, 2, 3},
{4, 5, 6}
};
for (int satir = 0; satir < matris.length; satir++) {
for (int sutun = 0; sutun < matris[satir].length; sutun++) {
System.out.print(matris[satir][sutun] + " ");
}
System.out.println();
}
Yukarıdaki kod, 2 satır ve 3 sütundan oluşan bir matris oluşturur. İç içe döngüler kullanılarak satırlar ve her satırdaki sütunlar taranır, elemanlar ekrana matris düzeninde yazdırılır.
java.util.Arrays Yardımcı Sınıfı
Java platformu, dizilerle çalışmayı kolaylaştırmak adına java.util.Arrays sınıfı altında çeşitli statik metotlar sunar. En sık kullanılan metotlar şunlardır:
Arrays.toString(dizi): Diziyi doğrudan okunabilir bir metin formatına çevirir.Arrays.sort(dizi): Dizi elemanlarını küçükten büyüğe (alfabetik olarak) sıralar.Arrays.binarySearch(dizi, anahtar): Sıralanmış bir dizide aranan elemanın indeksini ikili arama algoritmasıyla bulur.Arrays.fill(dizi, deger): Dizinin tüm elemanlarına belirtilen tek bir değeri atar.
import java.util.Arrays;
int[] sayiListesi = {42, 12, 88, 5, 23};
// Sıralama işlemi
Arrays.sort(sayiListesi);
// Dizi içeriğini tek satırda yazdırma
System.out.println(Arrays.toString(sayiListesi));
Bu kod parçası diziyi sıralar ve konsola [5, 12, 23, 42, 88] çıktısını verir.
Özet ve Sonraki Adım
Java dizi yapıları, verileri bellekte düzenli tutmanın en performanslı yoludur çünkü doğrudan bellek adreslemesiyle elemanlara O(1) karmaşıklığında doğrudan erişim imkanı tanır. Ancak sabit boyutlu olmaları, dinamik veri akışının olduğu projelerde esneklik kısıtı yaratır. Dizilerin çalışma mantığını kavradıktan sonraki adımınız, boyutu dinamik olarak büyüyüp küçülebilen Java Collections Framework yapılarını (özellikle ArrayList) incelemek olmalıdır.


Comments
No comments yet. Write the first comment.