Diziler

Bilgisayar ve Programlamaya Giriş
TanımİndeksDöngüAramaMatris
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Öğrenme Çıktıları

Oluşturma

Dizi tanımlamak ve ilk değer vermek.

Erişim

İndeks ve length kullanmak.

İşleme

Diziyi döngülerle gezmek ve dönüştürmek.

Matris

İki boyutlu dizilerle satır-sütun işlemleri yapmak.

Temeller

Dizi Nedir?

  • Aynı türde sabit sayıda elemanı tek nesnede saklar.
  • Elemanlara sıfır tabanlı indeksle erişilir.
  • Dizinin uzunluğu oluşturulduktan sonra değişmez.

Temeller

Dizi ve İndeks

10indeks 0
20indeks 1
30indeks 2
40indeks 3
50indeks 4
  • İlk indeks 0, son indeks length - 1'dir.
  • İndeks doğrudan erişim sağladığı için eleman erişimi O(1)'dir.

Temeller

Avantaj ve Sınır

AvantajSınır
İndeksle hızlı erişimBoyut sabittir
Eleman türü tutarlıdırAraya ekleme maliyetlidir
Döngüyle kolay işlenirSınır aşımı çalışma zamanı hatasıdır
Bellekte düzenli yapıFarklı türleri birlikte tutmaz

Tanımlama

Dizi Oluşturma

int[] sayılar = new int[5];
String[] adlar = {"Ada", "Can", "Ece"};
double[] ölçümler;
ölçümler = new double[10];
  • new ile oluşturulan sayısal elemanlar 0 başlangıç değerini alır.
  • Başlatıcı kullanıldığında uzunluk değer sayısından çıkarılır.

Erişim

Eleman Okuma ve Yazma

int[] puanlar = {70, 85, 90};
int ilk = puanlar[0];
puanlar[1] = 88;
int son = puanlar[puanlar.length - 1];

Erişim

Sınır Dışı Hatası

  • Geçerli indeksler 0 ile length - 1 arasındadır.
  • Negatif indeks veya length değerinin kendisi geçersizdir.
  • Hata ArrayIndexOutOfBoundsException olarak çalışma zamanında görülür.
Döngü koşulunda genellikle i < dizi.length kullanılır.

Döngüler

Klasik for ile Dolaşma

for (int i = 0; i < puanlar.length; i++) {
    System.out.printf("%d: %d%n", i, puanlar[i]);
}
  • İndeks gerektiğinde klasik for uygundur.

Döngüler

Gelişmiş for

for (int puan : puanlar) {
    System.out.println(puan);
}
  • Her elemanı sırayla okur.
  • Doğrudan indeks sağlamaz; eleman değişkenine atama diziyi değiştirmez.

İşlemler

Toplam ve Ortalama

int toplam = 0;
for (int değer : sayılar) toplam += değer;
double ortalama = sayılar.length == 0
    ? 0
    : (double) toplam / sayılar.length;
  • Boş dizi sıfıra bölmeyi önlemek için ele alınır.
  • double dönüşümü tam sayı bölmesini engeller.

İşlemler

En Küçük ve En Büyük

if (sayılar.length == 0) throw new IllegalArgumentException();
int min = sayılar[0], max = sayılar[0];
for (int değer : sayılar) {
    if (değer < min) min = değer;
    if (değer > max) max = değer;
}

İşlemler

Diziyi Ters Çevirme

for (int sol = 0, sağ = dizi.length - 1; sol < sağ; sol++, sağ--) {
    int geçici = dizi[sol];
    dizi[sol] = dizi[sağ];
    dizi[sağ] = geçici;
}
  • İki uç merkeze doğru ilerler.
  • Yerinde dönüşüm O(1) ek alan kullanır.

İşlemler

Dizi Kopyalama

  • Bir dizi değişkenini diğerine atamak elemanları değil başvuruyu kopyalar.
  • Bağımsız eleman kopyası için clone, Arrays.copyOf veya System.arraycopy kullanılabilir.
  • Nesne dizilerinde eleman başvuruları kopyalanır; nesnelerin kendisi derin kopyalanmaz.

Arama

Doğrusal Arama

static int ara(int[] dizi, int hedef) {
    for (int i = 0; i < dizi.length; i++)
        if (dizi[i] == hedef) return i;
    return -1;
}
  • En kötü zamanda O(n) eleman incelenir.

Arama

Sıralama ve İkili Arama

  • Arrays.sort diziyi doğal sıraya göre yerinde sıralar.
  • Arrays.binarySearch sıralı dizide hedefi arar.
  • Aramadan önce sıralama gereksinimi ve özgün sıranın korunup korunmayacağı değerlendirilmelidir.

Analiz

Temel Karmaşıklıklar

İşlemZaman
İndeksle erişimO(1)
Doğrusal aramaO(n)
Sona kadar dolaşmaO(n)
Ortaya ekleme / silmeO(n)
İki iç içe tam dolaşmaO(n²)

Matris

İki Boyutlu Dizi

  • Elemanları satır ve sütun mantığıyla düzenler.
  • Java'da iki boyutlu dizi aslında dizi elemanları yine dizi olan yapıdır.
  • Her satır farklı uzunlukta olabilir; buna düzensiz dizi denir.

Matris

Matris Oluşturma

int[][] matris = {
    {1, 2, 3},
    {4, 5, 6}
};
int değer = matris[1][2]; // 6
  • İlk indeks satır, ikinci indeks sütundur.

Matris

Matrisi Dolaşma

for (int satır = 0; satır < matris.length; satır++) {
    for (int sütun = 0; sütun < matris[satır].length; sütun++) {
        System.out.print(matris[satır][sütun] + " ");
    }
    System.out.println();
}

Matris

Matris Transpozu

int[][] t = new int[sütunSayısı][satırSayısı];
for (int i = 0; i < satırSayısı; i++)
    for (int j = 0; j < sütunSayısı; j++)
        t[j][i] = matris[i][j];
  • Transpozda satır ve sütun rolleri yer değiştirir.

Tasarım

Dizi mi Liste mi?

  • Boyut sabit ve düşük seviye erişim önemliyse dizi uygundur.
  • Eleman sayısı değişecekse ArrayList gibi koleksiyonlar daha kullanışlıdır.
  • İlkel tür dizileri kutulama olmadan değer saklayabilir.
  • API beklentisi ve performans ölçümü seçimi etkiler.

Doğrulama

Yaygın Hatalar

  • i <= length kullanarak son sınırı aşmak.
  • Boş dizide ilk elemanı başlangıç değeri almak.
  • Başvuru kopyasını bağımsız dizi sanmak.
  • Düzensiz matriste tüm satırların aynı uzunlukta olduğunu varsaymak.

Özet

Bölüm Özeti

  • Dizi aynı türde sabit sayıda elemanı sıfır tabanlı indeksle saklar.
  • length alanı geçerli üst sınırın bir fazlasıdır.
  • Dolaşma, arama ve dönüştürme işlemleri döngülerle gerçekleştirilir.
  • İki boyutlu diziler dizi dizileridir ve satır uzunlukları farklı olabilir.

Özet

Kontrol Soruları

  1. Beş elemanlı dizinin son indeksi nedir?
  2. Gelişmiş for ne zaman yetersiz kalır?
  3. Dizi ataması ile eleman kopyası arasındaki fark nedir?
  4. İkili arama için hangi ön koşul gerekir?
  5. matris.length ile matris[0].length neyi verir?

Son

Diziler
1 / 1Sercan KÜLCÜ, Tüm hakları saklıdır.

← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt