Java’da Diziler

Dizi Nedir?

Program geliştirmeye devam ettikçe daha karmaşık ve daha büyük veri gruplarıyla çalışmamız gerekecektir. Bütün programlama dillerinde olduğu gibi Java’da da diziler, bir veya birden fazla öğeye tek bir değişken üzerinden ulaşıp yönetmemize olanak sağlayan veri yapılarıdır. Diziler, verileri sıralı ve düzenli şekilde depolama ve yönetme açısından oldukça yararlıdırlar. Java dizileri üzerinde arama, sıralama gibi işlemler yapmamızı sağlayan en temel sınıflardan biri de daha sonra ele alacağımız Arrays sınıfıdır.

Java’da diziler, aynı veri tipindeki ilkel değişken veya nesne gruplarını barındıracak şekilde tasarlanmış yapılardır. Örneğin 30 kişilik bir sınıftaki öğrencilerin adlarını 30 ayrı string değişken ile tanımlamak yerine, 1 tane 30 elemanlı string dizisi ile tanımlayabiliriz. Tanımladığımız dizi üzerinden de her birine kolayca ulaşırız.

Dizilerin içerdiği her bir veri parçası genellikle “dizi elemanı” ya da “eleman” diye adlandırılır. Diziler elemanları sıralı bir şekilde tuttuğu kısımlarına da oda/hücre (cell) denir. Her bir hücrenin, o hücreye ulaşmamızı sağlayan benzersiz bir dizin numarası (indis / indeks numarası) vardır. Java’da diziler 0 (sıfır) indekslidir, yani dizin numaraları daima 0 dan başlar. Dizin numarası ile hücreye ulaşmak, eğer varsa o hücrenin içerdiği elemana ulaşmak ve o eleman üzerinde çalışabilmemiz anlamına gelmektedir.

  • Java dizileri homojen yapılıdır. Yani tüm dizi elemanları aynı veri tipinde olmalıdır.
  • Java’da dizilerin boyutu, yani barındırabileceği eleman sayısı sabittir ve dizi oluşturulurken belirlenir. Dizilerin barındırabileceği eleman sayısına “dizi uzunluğu” ya da “dizi boyutu” denilmektedir. Dizi uzunluğu sabittir ve sonradan değiştirilemez.
  • Java dizilerinde hepsi aynı veri tipinde olduğu sürece her tipten eleman barındırılabilir. İlla ilkel tip veri barındırılacak diye bir sınırlama yoktur. Herhangi bir Java sınıfından ya da kendi oluşturduğumuz sınıflardan türetilmiş nesneleri de dizilerde barındırabiliriz.
  • Çoğu programlama dilinde olduğu gibi Java dizileri de 0 (sıfır) indekslidir, yani dizin numaraları daima 0 dan başlar ve 1, 2, 3,…, n şeklinde sıralı olarak devam eder. En az 1 elemana sahip olan dizilerde ilk elemanın indisi her zaman 0’dır ve son elemanın indisi de dizi uzunluğu – 1‘dir.

Dizilerinin uzunluğunun başta belirlenmesinin zorunlu olması bazı durumlarda bize zorluk çıkarabilmektedir. Şöyle ki uzunluğu başta belirlenen bir dizinin uzunluğunu çalışma zamanında (runtime) değiştirmek mümkün değildir. Ancak kopyalama gibi bir dizi işlem ile istenilen boyutta “yeni bir dizi” elde edilebilir ancak bu durum ekstra bellek ve işlem anlamına gelmektedir. Mevcut dizinin uzunluğu sabittir ve müdahale edilemez. Java’da eleman eklendikçe genişleme özelliğine sahip daha esnek yapılar da mevcuttur. Onları da daha sonraki yazılarımda ele alabilirim.

Java’da Dizi Oluşturma ve İlk Değer Ataması Nasıl Yapılır?

Java’da bir dizi oluşturmanın temelde iki farklı yolu vardır. Bunlardan ilki dizi uzunluğunu belirterek yapılan oluşturma yöntemi, ikincisi de dizi elemanlarını belirterek yapılan oluşturma yöntemidir.

//Dizi uzunluğu belirterek;
veriTipi[] diziAdi = new veriTipi[int elemanAdedi];

//Dizi elemanlarını belirterek;
veriTipi[] diziAdi = {eleman1 , eleman2 , eleman3};

//Oluşturulan "diziAdi" değişkeninin bir dizi olduğunu belirten köşeli parantezler ([])
//alttaki gibi "diziAdi" sonrasına da yazılabilir.
veriTipi diziAdi[] = new veriTipi[int elemanAdedi];
veriTipi diziAdi[] = {eleman1 , eleman2 , eleman3};

İkinci temel dizi oluşturma yönteminde göreceğiniz üzere elemanların ilk değerini biz belirlemiş oluyoruz. Diğer temel dizi oluşturma yönteminde ise durum biraz farklıdır. Dizi uzunluğu belirtilerek oluşturulan dizilerde tüm elemanların ilk değeri, dizinin veri tipinin varsayılan değeri olarak belirlenir. Şöyle ki, 10 elemanlı bir tamsayı dizisi oluşturduğumuzda her elemanın ilk değeri 0 (sıfır) olarak belirlenir. Veri tipine göre varsayılan değerler aşağıdaki gibidir.

Java’ da Veri Tiplerine Göre Varsayılan Değerler:

  • İlkel Tip (Değer Tip, Basit Tip, Primitive Types) Varsayılan Değerleri
    • Tam Sayılar
      • byte: 0 (sıfır)
      • short: 0 (sıfır)
      • int: 0 (sıfır)
      • long: 0 (sıfır)
    • Ondalıklı Sayılar
      • float: 0.0f
      • double: 0.0d
    • Karakter
      • char: ‘\u0000’ (null karakteri)
    • Mantıksal
      • boolean: false
  • Referans (Karmaşık) Tip (Complex / Referance / Non-Primitive Type) Varsayılan Değerleri
    • String veri tipi dahil olmak üzere tüm referans tiplerin varsayılan değeri null‘dır.

Java’da Dizi Elemanlarına Erişim Ve Güncelleme Nasıl Yapılır?

Dizi elemanlarına erişim için indeksleme yöntemi kullanılmaktadır. Dizin numarası, indis veya indeks (index) diye adlandırılan tamsayı değeri, dizideki her elemanının konumunu belirtmektedir. Bu nedenle bir dizinin elemanlarına ulaşmak için; dizi adı ve ardından köşeli parantez içerisinde ulaşılmak istenen elemanın konumunu belirten dizin numarası yazılır. Sonrasında ulaşılan eleman üzerinden istenilen işlemler yapılabilir.

//3 elemanlı bir dizi oluşturalım;
String[] isimler = new String[3];

//Her elemanın değerini güncelleyelim;
isimler[0] = "Elif";
isimler[1] = "Raif";
isimler[2] = "Tam Weblik";
isimler[2] = "Java";

Yukarıda görüldüğü gibi dizi elemanlarına köşeli parantez içinde dizin numarasını yazarak ulaşabilir ve sonrasında atama operatörü “=” ile değerini güncelleyebiliriz. Örnekte isimler dizisinin 2 (iki) numaralı indisindeki elemanını başta “Tam Weblik” olarak belirleyip, sonrasında “Java” olarak tekrar güncelledik. Bu da aynı konumdaki elemana istediğimiz kadar erişim ve güncelleme yapabileceğimiz anlamına gelmektedir.

Diziler Üzerinde Çalışırken Yapılan Hatalar ve Çözümleri

Diziler ile çalışırken sıklıkla hata yapılabilmektedir. Bu hatalar, programımızın istediğimiz gibi çalışmamasına veya çökmesine neden olabilir.

  • Sınırları Kontrol Etmemek
    • Dizinin sınırlarının dışında bir indekse erişmeye çalışmak, “IndexOutOfBoundsException” hatasına sebep olur ve programımız çöker. Dizi uzunluğuna eşit veya büyük bir dizin numarası ile işlem yapmadığımızdan emin olmamız gerekir. Aynı şekilde dizin numarası negatif değer de olamaz. “n” elemanlı bir dizinin elemanlarına “0’dan n-1’e” kadar olan dizin numaraları ile erişilir. Bu aralık dışında girilen her indeks numarası hata verecektir.
  • Veri Tipi Uyumsuzluğu
    • Dizi elemanlarına değer ataması yaparken veri tipine dikkat edilmelidir. Dizi elemanlarına atanan verilerin dizinin veri tipiyle uyumlu olduğundan emin olun.
  • Null Kontrolü
    • Bir diziyi null olarak başlatmak veya diziye null bir değer atamak, “NullPointerException” hatasına neden olabilir. Aynı şekilde dizi elemanlarından null olanlar var ise ve bu elemanlarla işlem yapmak istersek yine hata alabiliriz. Bu nedenle hem dizi değişkeninin hem de dizi elemanlarının null olma durumlarına dikkat edilmelidir.

Diziler konusuna genel anlamda bir giriş yaptığımız bu yazı sonrasında, çok boyutlu dizileri ve Arrays sınıfının sık kullanılan metodları ile diziler üzerinde yapılabilecek işlemleri ele almayı düşünüyorum. Sonraki yazılarda görüşmek üzere…

Paylaşmak güzeldir...

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir