Java Diziler

Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java, dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir elemana rastlanırsa hata oluşur. Bu da cde çıkan hafıza bozulmalarını önler. Javada dizi kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü belirtilmez
Java Diziler

Diziler

Diziler aynı veri tipinde birden fazla veriyi barındıran veri tiplerine dizi adı verilir. Örneğin 100 kişinin adını program içinde bir değişkendetutmak için 100 tane String değişken tanımlamak yerine dizi kullanılır.

Dizideki her bir elemana indeks numarası ile erişilir. Mesela notlar değişkeni integer tipinde bir dizi ise notlar[i] ifadesi dizinini. tamsayısını gösterir.

Bir dizi tanımlamak için dizi hangi veri tipinde olacak ise veritipinin adı yazıldıktan sonra “[ ]” eklenir ve dizi değişkeni yazılır. Örneğin tamsayı tipinde dizi tanımlamak için

int[ ] notlar;                                                     //integer tipinde notlar değişken dizisini tanımlar.

Yukarıdaki ifade notlar dizisinin tanımlamasını yapar fakat diziye herhangi bir değer atayamazsınız. Diziye değer atamak için başlatılması gerekir, bu amaçla;

int[ ] notlar;

notlar=new int[5];                                       //new operatörü ile başlatma yapılır

Dizi tanımlaması yaparken kullanılan köşeli parantezler veritipiyerine değişken adından sonra da yazılabilir;

int notlar[ ]=new int[5];


Diziler

int[ ] ciftSayilar=new int[10];

for (int i=0;i<10;i++)
ciftSayilar[i]=i*2;

for (int i=0;i<10;i++)
System.out.println(i + ". sırada: "+ ciftSayilar[i]);
 

/*yukarıdaki kodda dikkat edilmesi gereken dizilerin ilk elemanı 0&#8217;dan başlar, son elemanı ise tanımda belirtilen sayının bir eksiğidir. Yukarıda 0-9 arasında indeks değerleri alır. */

 

Dizi Boyutu

Bir dizideki eleman sayısını bulmak için length özelliği kullanılr. örneğin;

int[ ] notlar=new int[5];
int boyut=notlar.length                                    //boyut=5

dizinin boyutu dizi başlatıldıktan sonra oluşur, örneğin;

 
int[ ] notlar;
int boyut=notlar.length                                 //hata verir.


Dizi Başlangıç Değerleri

Diziler tanımlanırken başlangıç değeri atamak için;
 

int[ ] asalSayilar={ 2, 3, 5, 7, 11, 13 };
 

yukarıdaki ifade 6 elemanlı bir dizi oluşturur ve parantezler içindeki sayıları diziye atar.

Bu dizi oluşturulurken new operatörünün kullanılmasına gerek yoktur. New operatörü diziyi bellekte başlatmak için gereklidir, burada ise dizi başlangıç değerleri atayarak başlatıldığından buna gerek yoktur.


Diziler

Javada 0 elemanlı diziler tanımlayabilirsiniz;
 

int[ ] donusDizi=new int[0];
 

Bu tip bir dizinin kullanım yeri dönüş tipi dizi olan bir metot boş değer döndüreceğinde kullanılabilir.

  Array kütüphanesini kullanmak için java kodunun başlangıcına yazılması gereken satır:

import java.util.*;
 

Dizilerin Kopyalanması

Bir diziyi başka bir diziye kopyalamak için dizi şeklinde tanımlanmış iki değişken birbirine atama yapıldığında her iki deişkende aslında aynı diziyi (belleğin aynı yerini) göstermeye başlar. Bu işlem C’de bir pointerın değerinin bir ka pointera atanması gibidir.

 
int[ ] asalSayilar={ 2, 3, 5, 7, 11, 13 };

int[ ] yeniSayilar=asalSayilar;

yeniSayilar[5]=17;                                           //asalSayilar[5]&#8217;de 17 olur

Bir dizinin kopyasının başka bir dizi değişkeni şeklinde bellekte kopyalanmasını isetersek System sınıfının arraycopy() metodunu kullanırız.

System.arraycopy(HangiDiziden, kaynakBaslangicSirasi, HangiDiziye, hedefBaslangicSirasi, kacTane);


int[ ] asalSayilar = {2, 3, 5, 7, 11, 13};
int[ ] sansliSayilar= {1001,1002,1003,1004, 1005, 1006,1007};

System.arraycopy(asalSayilar, 2, sansliSayilar, 3, 4);

for (int i = 0; i < sansliSayilar.length; i++)
System.out.println(i + ": " + sansliSayilar[i]);

Ekran çıktısı;

0: 1001
1: 1002
2: 1003
3: 5
4: 7
5: 11
6: 13


Komut Satırı Parametreleri


Şu ana kadar gördüğümüz bütün java programları main metodu içermekteydi ve bu metotların hepsi String[ ] args parametresi almakta idi.

public static void main(String[] args)

Bu bize programa komut satırından verilen parametrelerin dizi olarak saklandığını ve bu dizinin args adında olduğunu anlatr.


public class Ders5{

    public static void main(String[] args) {

        if (args[0].equals("-h")) System.out.println("Help satırı");
        else if (args[0].equals("-s")){
            System.out.print("Selam, ");     // bütün komut satırı parametrelerini yaz

            for (int i = 1; i < args.length; i++)
            System.out.print(" " + args[i]);
        }
    }
}


Dizilerin Sıralanması


Sayı veritipinden oluşan dizilerin sıralanması için java.util paketindeki Arrays sınıfının sort() metodu kullanılmaktadır.

int[ ] a = new int[10000];
. . .
Arrays.sort(a)

Bu metot birçok durumda çok hızlı sonuçlar veren hızlı sıralama (quicksort) algoritmasın kullanmaktadır.


Dizide arama yapma

Bir sayı dizisinde sayı değeri aramak için Arrays sınıfının binarySearch metodu kullanılır;

static int binarySearch(Xxx[ ] a, Xxx v)

Parametreler:

a:int, long, short, char, byte, boolean, float veya double veritiplerinden birinde tanımlanmış sıralı bir dizi
v: a dizisi ile aynı veri tipinde bir değer

Bu metot binarysearch algoritmasını kullanarak a dizisini tarar ve v’nin bulunduğu yerin indeks numarasnı döndürür. Eğer v’yi bulamaz ise v’nin olması gerektiği yerin bir fazlasının negatif değerini döndürür.

Örneğin -5 dönmüş ise aranan değer sıralı dizide bulunamamıştır, eğer bulunsa idi 4. sırada bulunması gerekirdi.


Dizinin içini doldurmak


Bir sayı dizisinin içini belirli bir değer ile doldurmak için Arrays sınıfının fill() metodu kullanılır.

static void fill(Xxx[ ] a, Xxx v)

Burada a: int, long, short, char, byte, boolean, float veya doubletipinde bir dizi,v: Belirtilen dizi ile aynı veritipinde bir değerdir.

 
int[ ] aramaDizisi=new int[ ];
Arrays.fill(aramaDizisi, 0);
 

Dizileri Karşılaştırmak


İki sayı dizisini karşılaştırmak için

Arrays.equals(birinci dizi[ ], ikinci dizi[ ])

metodu kullanılır, metodun kullanımı şu şekildedir;

int[ ] asalSayilar = {6, 3, 99, 7, 11, 13};
int[ ] dizi2= {6, 3, 99, 7, 11, 13, 17};

System.out.println(Arrays.equals(asalSayilar, dizi2));                    //true yazar


Çokboyutlu diziler

Çokboyutlu diziler matrislerin bilgisayardaki karşılıklarıdır ve birden fazla indeks kullanırlar, örneğin iki boyutlu bir dizi iki boyutlu matris gibidir ve gösterimi şu şekildedir;

int[ ][ ] tablo=new int[3][3] ;
int[ ][ ] sihirliKare={
                                   
{16, 3, 2, 13},
                                    {5, 10, 11, 8},
                                    {9, 6, 7, 12},
                                    {4, 15, 14, 1}
                                };




Javada gerçekte bütün diziler tek boyutludur, örneğin iki boyutlu bir dizi tanımlarsanız bu bellekte tek boyutlu dizilerden oluşan bir dizi olarak saklanır.
Bu bizim dizilerle oynamamızı kolaylaştırır,

Örneğin;

 
int[ ] temp=sihirliKare[1];
sihirliKare[2]=sihirliKare[1];
sihirliKare[1]=temp;                                       //sihirliKare dizisinin 2. ve 1. satırlarının yerlerini değiştirir (büyü bozuldu).
 

Adi Diziler


Javada çok boyutlu dizilerin dizilerden oluşan diziler olarak tanımlanması bize satır boyutları farklı iki boyutlu dizi oluşturma imkanı sağlar.

 
          int NMAX = 5;
          int[][] odds = new int[NMAX+1][];

          for (n = 0; n <= NMAX; n++)
                odds[n] = new int[n+1];

          for (n = 0; n < odds.length; n++)
                  for (k = 0; k < odds[n].length; k++)
                  {
                          odds[n][k] = k;
                  }

          for (int n = 0; n < odds.length; n++)
          {
                  for (int k = 0; k < odds[n].length; k++)
                  { // pad output with spaces
                          String output = " " + odds[n][k]; // make output field 4 characters wide
                          output = output.substring(output.length() - 4);
                          System.out.print(output);
                  }
                  System.out.println();
          }
 

Kaynak Uğur Kahraman

Yorumunuzu Ekleyin
Java Diziler Yorumları +2 Yorum
  • ossi
    1
    ossi
    çok güzel bi paylaşım
    tşkler
    29 Ekim 2010 22:34:20, Cuma
  • bayan mühendis
    1
    bayan mühendis
    çok yararlı venet bi site çok beğendim emeği geçenlere çok teşekkürler
    10 Nisan 2014 23:31:37, Perşembe


Yükleniyor...
Yükleniyor...