Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 119 additions & 0 deletions array.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# 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.

<img width="710" height="190" alt="image" src="https://github.com/user-attachments/assets/4099c31a-2ddd-485d-91fe-02b45b89db3b" />

- 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.

- Dizinin hafızada bir başlangıç adresi olur ve ardışık olan diğer elemanlar sırayla hafızaya yerleştirilir. Diziler "new" anahtar sözcüğüyle oluşturulur. Böylece, Heap Hafıza bölgesinde yer kaplarlar.

- Dizinin genel formülü zihinde şöyle durabilir:
```java
“Tip + [] + isim = {elemanlar}”
```
- Ya da elemanları sonra vereceksen:
```java
“Tip + [] + isim = new Tip[boyut]”
```
- Daha sonra:
```java
“isim[index] = değer”
```
```java
double[] myList; // tercih edilen yol
```
veya
```java
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.

```java
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
// 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.
```java
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++)
{
System.out.print(array[i] + " ");
}
}
public static void main(String[] args) {
int[] list = {1,2,3,4};
printArray(list); // ← kırmızı yer burası
}
```
#### “Kırmızı” diye anlatılan kısım tam olarak:
```java
printArray(list);
```
- Çünkü burada list dizisini fonksiyona gönderiyorsun. Java diyor ki:

- “Ben sana bu dizinin referansının bir kopyasını veriyorum.”

- Fiziksel dizinin kendisi kopyalanmaz; sadece diziyi gösteren adresin bir kopyası gider. İşte bunun adı “Pass by Value”.

- Kısacası:
- Değişken = referans
- Fonksiyona giderken = referansın kopyası gider
- Ama iki taraf da aynı gerçek diziyi gösterir

Bu yüzden fonksiyon diziyi değiştirirse, asıl dizin de değişmiş olur.

- 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.

```java
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".