Diziler
Bilgisayar ve Programlamaya Giriş
TanımİndeksDöngüAramaMatris
Sercan KÜLCÜ · Giresun ÜniversitesiGiriş
Öğ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
| Avantaj | Sınır |
|---|---|
| İndeksle hızlı erişim | Boyut sabittir |
| Eleman türü tutarlıdır | Araya ekleme maliyetlidir |
| Döngüyle kolay işlenir | Sı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
| İşlem | Zaman |
|---|---|
| İndeksle erişim | O(1) |
| Doğrusal arama | O(n) |
| Sona kadar dolaşma | O(n) |
| Ortaya ekleme / silme | O(n) |
| İki iç içe tam dolaşma | O(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ı
- Beş elemanlı dizinin son indeksi nedir?
- Gelişmiş for ne zaman yetersiz kalır?
- Dizi ataması ile eleman kopyası arasındaki fark nedir?
- İkili arama için hangi ön koşul gerekir?
- 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