# Dizilerin Genel Mantıkları Java'da Diziler (Arrays) , her deÄer için ayrı deÄiÅkenler oluÅturmak yerine, birden çok deÄeri tek bir deÄiÅkende depolamak için kullanılır. DeÄiÅkenler hafızada tek bir deÄer tutmamızı saÄlar. Fakat bazı durumlarda, birden çok veriyi bir arada bulundurmak isteriz. ÃrneÄin, bir sınıfta okuyan 20 öÄrenci olsun. Bu 20 öÄrenci için hafızada ayrı ayrı 20 tane deÄiÅken oluÅturmak yerine, tek bir deÄiÅken kullanarak 20 öÄrencinin koleksiyonunu tutmak isteyebiliriz. Bu gibi durumlarda dizileri kullanırız. Dizi, aynı türden birden fazla deÄiÅkeni tutmamızı saÄlayan hafıza birimidir. Kısaca, dizileri aynı türden elemanları gruplamak için kullanırız. Dizi oluÅturduktan sonra dizinin içerisindeki elemanlara indeks numarasıyla ulaÅır ve deÄiÅtiririz. Ayrıca, çok boyutlu diziler oluÅturmak da mümkündür. Tek boyutlu dizi kullanabileceÄimiz gibi 2 veya 3 boyutlu diziler de oluÅturabiliriz. 2 boyutlu dizilere matris denir. Dizi (Array) kavramı programlama dillerinde bir veri tipini ifade eder. Bu veri tipi liste halindeki ardıÅık verileri bir arada tutan yapıya denilir. Bu ardıÅık yapıya ait elemanlara indis yoluyla eriÅim saÄlanabilir. Diziler sabit boyutludur ve tanımlanırken boyutları belirtilir.  Yukarıdaki örnek 10 eleman boyutunda "Integer" veri tipi tutan bir dizidir. Dizilerdeki herhangi bir elemana ulaÅmak için indis numaraları kullanılır. Dizi indisleri her zaman 0'dan baÅlar o yüzden dizinin son elemanının deÄeri, dizi boyutuna eÅit deÄildir ve bu dikkat edilmesi gereken bir konudur. Dizi'nin hafızada bir baÅlangıç adresi olur ve ardıÅık olan diÄer elemanlar sırayla hafızaya yerleÅtirilir. Dizi'ler "new" anahtar sözcüÄüyle oluÅturulur. Böylece, Heap Hafıza bölgesinde yer kaplarlar. ``` double[] myList; // tercih edilen yol veya double myList[]; // baÅka türlü tanımlama biçimi ``` Diziler veri tipi ve [] parantezler ile belirtilir. Yukarıda iki farklı tanımı görülmektedir. Hafızadan yer alıp diziye alan ayırabilmek için "new" anahtar kelimesi kullanılır. ``` double[] myList = new double[10]; ``` Yukarıda maksimum 10 eleman alabilen "double" veri tipinde olan bir dizi oluÅturulmuÅtur. Yukarıda "myList" isminde bir dizi tanımlamıÅtık. Tanımlanan dizi hafıza yukarıdaki Åekildeki gibi tutulur. "myList" deÄiÅkeni dizinin baÅlangıç adresini tutar. Dizilerde ardıÅık bir sıra olduÄu için ilk elemandan sonra gelen elemanların hafıza adresleri de birer birer artar. Dizi blok halinde yer kaplar. Diziye eriÅmek için indeks numarası kullanılır. ÃrneÄin: "myList[0]" demek dizinin 1. Elemanını verecektir. Java'da dizilerin indeksleri sıfırdan baÅlar. ÃrneÄin: "myList[5]", yani 5 nolu indeksteki dizi elemanını ver dediÄimizde aslında dizinin 6. Elemanına eriÅmiÅ oluruz. Ãrnekler: ``` // Java'da diziye ilk deÄerler süslü parantezler arasında verilir. double[] myList = { 1.9, 2.9, 3.4, 3.5 }; // tüm dizi elemanlarını arada boÅuk bırakarak sırayla ekrana yazdırır. for (int i = 0; i < myList.length; i++) { System.out.println(myList[i] + " "); } ``` Yukarıdaki örnekte myList isimli diziye ilk deÄerleri hemen verilmiÅtir. Süslü parantezler arasında kalan deÄerler dizi elemanlarıdır. Ardından, bir "for" döngüsü ile dizi elemanları ekrana yazdırılır. ### Dizileri Fonksiyonlara Parametre Olarak Göndermek TanımladıÄınız dizileri fonksiyonlara parametre olarak gönderebilirsiniz. ÃrneÄin elimizde static bir fonksiyon olsun. Bu fonksiyona int tipinde verileri olan bir diziyi girdi (input) olarak vermek istersek aÅaÄıdaki gibi olur. ``` public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } ``` printArray ( int[] array ) kırmızı olarak iÅaretlediÄimiz yer diziyi yerel deÄiÅken olarak fonksiyona gönderdiÄimiz noktadır. Java'da tüm deÄiÅkenler "Pass by Value" yöntemiyle geçilir. Bu Åu demektir. Sizin tanımladıÄınız deÄiÅkenin, nesnenin veya dizinin birebir kopyası oluÅturulur. Bu kopya deÄer fonksiyona yerel deÄiÅken olarak gider. Bu Java mülakatlarında size sorulabilecek bir detaydır. ### Dizileri Fonksiyonlardan Geri Döndürmek Fonksiyonlar belli bir iÅi yapıp sonucunda deÄer dönebilen veya dönmeyen kod bloklarıdır. Fonksiyonlar için altın kural, her fonksiyonun tek bir iÅi olmalıdır. ÃrneÄin: dizi ortalaması alma iÅi yapan bir fonksiyon dizileri ekrana yazdırma iÅini yapmamalıdır. Veya dizilerin ortalamasını alma iÅi ile dizileri toplama iÅlemi aynı fonksiyon içinde olmamalıdır. Her biri ayrı fonksiyonlar olmalıdır. ``` public static int[] reverse(int[] list) { int[] result = new int[list.length]; for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; } return result; } ``` Yukarıda dizinin tersine çevrilmiÅ halini döndüren bir fonksiyon vardır. public static **int[]** reverse(â¦) koyu renkle iÅaretlenen alan dizi döndüreceÄimizi ve bu dizinin veri tipini söylüyoruz. Burada veri tipimiz "int".