Eğitim Portalı/Java/Arrays Yardımcı Sınıfı
Java01-java/72-arrays-yardimcilari

Arrays Yardımcı Sınıfı

Diziler (int[], String[]...) Java'nın en temel veri yapısıdır: sabit boyutlu, hızlı, bellek açısından kompakt. Ama dizilerin metotları yoktur — sıralamak, aramak, kopyalamak, karşılaştırmak için java.util.Arrays yardı…

Arrays Yardımcı Sınıfı

Diziler (int[], String[]...) Java'nın en temel veri yapısıdır: sabit boyutlu, hızlı, bellek açısından kompakt. Ama dizilerin metotları yoktur — sıralamak, aramak, kopyalamak, karşılaştırmak için java.util.Arrays yardımcı sınıfını kullanırsın. Bu konu, dizilerle günlük çalışmayı kolaylaştıran bu metotları ve çok boyutlu dizi inceliklerini ele alır.

Tek boyutlu dizi işlemleri

Arrays.sort(dizi);                  // yerinde sırala
Arrays.binarySearch(dizi, x);       // SIRALI dizide hızlı ara (O(log n))
Arrays.copyOf(dizi, yeniBoyut);     // kopya (boyut değiştirebilir)
Arrays.copyOfRange(dizi, from, to); // dilim [from, to)
Arrays.fill(dizi, deger);           // tümünü doldur
Arrays.equals(a, b);                // İÇERİK karşılaştırması
Arrays.toString(dizi);              // okunaklı yazdırma
Arrays.asList(dizi);                // List görünümü
Arrays.stream(dizi);                // Stream'e çevir

Örnek 1 (./Ornek1.java) hepsini gösterir. İki kritik tuzak:

== vs Arrays.equals: Diziler nesnedir; a == b referansları karşılaştırır (içerik aynı olsa bile false olabilir). İçerik için Arrays.equals(a, b) kullan.

toString tuzağı: dizi.toString() çöp basar ([I@1b6d3586). Okunaklı çıktı için Arrays.toString(dizi) kullan.

asList sınırı: Arrays.asList, sabit boyutlu bir görünüm döndürür (add/remove atar). Değiştirilebilir liste için new ArrayList<>(Arrays.asList(...)).

Çok boyutlu diziler

Java'da çok boyutlu dizi aslında "dizilerin dizisidir": int[][], her elemanı bir int[] olan bir dizidir. Bunun iki sonucu var:

  • Satırlar farklı uzunlukta olabilir (jagged / düzensiz dizi).
  • Yazdırma/karşılaştırma için derin (deep) sürümler gerekir:
Arrays.deepToString(matris);   // iç içe dizileri doğru yazdırır
Arrays.deepEquals(m1, m2);     // içerik karşılaştırması (derin)

Örnek 2 (./Ornek2.java) bir matrisi gezer, deepToString/deepEquals'i ve düzensiz diziyi gösterir. (Sıradan toString/equals çok boyutluda yanıltıcıdır — iç dizilerin adresine bakar.)

Dizi mi, koleksiyon mu?

Dizi (T[])ArrayList<T>
BoyutSabitDinamik
İlkel tipDestekler (int[])Hayır (kutulama)
APIYok (Arrays yardımcı)Zengin
PerformansEn kompakt/hızlıÇok yakın, esnek

İlkel tiplerle yoğun sayısal iş veya sabit boyut için dizi; esneklik ve API için ArrayList (topic 47).

Performans notu

Çok büyük dizilerde Arrays.parallelSort, birden çok çekirdek kullanarak sort'tan daha hızlı sıralayabilir. Küçük dizilerde fark yoktur (hatta ek yük getirir).

Özet

Arrays sınıfının dizilerle çalışmayı kolaylaştıran metotlarını — sort/binarySearch/copyOf/ fill/equals/toString/asList/stream (Örnek 1) — ve == vs equals, toString tuzaklarını öğrendik; çok boyutlu dizileri, deepToString/deepEquals ve düzensiz dizileri (Örnek 2) gördük. Sırada, bit düzeyinde verimli bayrak yönetimi: BitSet.

Kod Örnekleri(2)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: Arrays yardımcı sınıfı — sıralama, arama, kopyalama, karşılaştırma.
2// Çalıştırma: java Ornek1.java
3import java.util.Arrays;
4
5public class Ornek1 {
6
7    public static void main(String[] args) {
8        int[] sayilar = { 5, 2, 8, 1, 9, 3 };
9
10        // toString: diziyi okunaklı yazdır (dizilerin kendi toString'i işe yaramaz!)
11        System.out.println("Ham: " + Arrays.toString(sayilar));
12
13        // sort: yerinde sıralar
14        Arrays.sort(sayilar);
15        System.out.println("Sıralı: " + Arrays.toString(sayilar));
16
17        // binarySearch: SIRALI dizide hızlı arama (O(log n)) — dizinin sıralı olması ŞART
18        System.out.println("8'in indeksi: " + Arrays.binarySearch(sayilar, 8));
19
20        // copyOf / copyOfRange: kopya/dilim (boyut değiştirebilir)
21        int[] kopya = Arrays.copyOf(sayilar, 4);            // ilk 4
22        int[] dilim = Arrays.copyOfRange(sayilar, 1, 4);    // [1,4) aralığı
23        System.out.println("copyOf(4): " + Arrays.toString(kopya));
24        System.out.println("copyOfRange(1,4): " + Arrays.toString(dilim));
25
26        // fill: tümünü bir değerle doldur
27        int[] sifirlar = new int[5];
28        Arrays.fill(sifirlar, 7);
29        System.out.println("fill(7): " + Arrays.toString(sifirlar));
30
31        // equals: içerik karşılaştırması (== referans karşılaştırır, yanıltıcı!)
32        int[] a = {1, 2, 3}, b = {1, 2, 3};
33        System.out.println("a == b ? " + (a == b) + " | Arrays.equals(a,b) ? " + Arrays.equals(a, b));
34
35        // asList: diziyi List'e (sabit boyutlu görünüm); stream ile işleme
36        String[] kelimeler = { "elma", "armut", "kiraz" };
37        System.out.println("asList: " + Arrays.asList(kelimeler));
38        int toplam = Arrays.stream(sayilar).sum();
39        System.out.println("stream().sum(): " + toplam);
40
41        System.out.println("""
42
43                --- Arrays yardımcı sınıfı ---
44                Diziler ilkel/sabit boyutludur ve metotları yoktur; Arrays sınıfı yardımcıları sağlar.
45                sort (yerinde sırala), binarySearch (SIRALI dizide hızlı ara), copyOf/copyOfRange (kopya/dilim),
46                fill (doldur), equals (İÇERİK karşılaştır — '==' referansa bakar!), toString (yazdır),
47                asList (List görünümü), stream (akışa çevir). Çok boyutlu için deepToString/deepEquals (sonraki örnek).""");
48    }
49}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: Çok boyutlu diziler ve deepToString/deepEquals.
2// Çalıştırma: java Ornek2.java
3import java.util.Arrays;
4
5public class Ornek2 {
6
7    public static void main(String[] args) {
8        // 2 boyutlu dizi (matris): satır x sütun
9        int[][] matris = {
10                { 1, 2, 3 },
11                { 4, 5, 6 },
12                { 7, 8, 9 }
13        };
14
15        // toString çok boyutluda işe YARAMAZ (iç dizilerin adresini basar); deepToString gerekir.
16        System.out.println("toString    : " + Arrays.toString(matris));      // [[I@... çöp
17        System.out.println("deepToString: " + Arrays.deepToString(matris));  // içerik
18
19        // Erişim ve gezinme
20        System.out.println("\nmatris[1][2] = " + matris[1][2]);
21        long kosegen = 0;
22        for (int i = 0; i < matris.length; i++) kosegen += matris[i][i];
23        System.out.println("Köşegen toplamı: " + kosegen);
24
25        // Çok boyutlu karşılaştırma: deepEquals
26        int[][] m2 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
27        System.out.println("\nequals     : " + Arrays.equals(matris, m2));      // false (iç diziler farklı nesne)
28        System.out.println("deepEquals : " + Arrays.deepEquals(matris, m2));    // true (içerik aynı)
29
30        // Düzensiz (jagged) dizi: satırlar farklı uzunlukta olabilir
31        int[][] jagged = new int[3][];
32        jagged[0] = new int[]{ 1 };
33        jagged[1] = new int[]{ 1, 2 };
34        jagged[2] = new int[]{ 1, 2, 3 };
35        System.out.println("\nJagged: " + Arrays.deepToString(jagged));
36
37        System.out.println("""
38
39                --- Çok boyutlu diziler ---
40                Java'da çok boyutlu dizi = "dizilerin dizisi" (int[][] -> her eleman bir int[]).
41                Bu yüzden satırlar farklı uzunlukta olabilir (jagged/düzensiz dizi).
42                deepToString/deepEquals: iç içe dizileri DOĞRU yazdırır/karşılaştırır (toString/equals yetmez).
43                Büyük dizilerde Arrays.parallelSort çok çekirdekte daha hızlı sıralayabilir.""");
44    }
45}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.