- Katılım
- 7 Nis 2025
- Konular
- 367
- Mesajlar
- 780
- Çözümler
- 1
- Tepkime puanı
- 121
- Puan
- 93
- Konum
- İstanbul
- Web sitesi
- forumagel.com
Hazır Kod Bankası - Konu 19: Java'da Diziler (Arrays) ve Temel Koleksiyon Yapıları
Hazır Kod Bankası Serimizin On Dokuzuncu Konusu: Java'da Diziler ve Temel Koleksiyonlar![/B]
Merhaba arkadaşlar! Java'ya giriş yaptıktan ve Nesne Tabanlı Programlamanın temel prensiplerini Java bağlamında inceledikten sonra, şimdi programlamada çok yaygın olarak kullanılan bir ihtiyacı karşılayan yapılara bakıyoruz: Birden fazla veriyi bir arada saklama. Tek bir değişkende sadece bir değer tutabilirken, uygulamalarımız genellikle listeler, koleksiyonlar veya tablolar halinde veri işler.
İşte bu noktada Diziler (Arrays) ve Koleksiyonlar (Collections) devreye girer. Her ikisi de aynı tipteki birden fazla değeri bir yapıda gruplamamızı sağlar, ancak farklı özellikleri ve kullanım senaryoları vardır. Bu konuda Java'daki dizilerin (sabit boyutlu) ve Java Koleksiyonlar Çatısı (Collections Framework) altındaki en yaygın dinamik boyutlu yapılardan biri olan `ArrayList`'in temellerini öğreneceğiz.
1. Diziler (Arrays) Nedir?
Diziler, aynı veri tipindeki sabit sayıda elemanı, ardışık bellek konumlarında depolayan veri yapılarıdır. Boyutları oluşturulduklarında belirlenir ve sonradan değiştirilemez. Diziler, elemanlara indeks numaraları (0'dan başlayarak) aracılığıyla hızlı erişim imkanı sunar.
2. Java'da Diziler
Java'da dizi tanımlama, başlatma ve elemanlarına erişme:
- Tanımlama: Dizi değişkenini bildirirsiniz. `DataType[] arrayName;` veya `DataType arrayName[];` şeklinde olabilir (ilk kullanım daha yaygın).
Java:int[] sayilar; // int tipinde sayılar dizisi tanımlandı String isimler[]; // String tipinde isimler dizisi tanımlandı (daha az kullanılır)
- Başlatma (Oluşturma): Dizinin boyutunu belirtirsiniz ve bellekte yer ayrılır. Elemanlar varsayılan değerlerle (sayılar için 0, boolean için false, String/objeler için null) başlatılır.
Java:sayilar = new int[5]; // 5 elemanlı int dizisi oluşturuldu. Elemanlar {0, 0, 0, 0, 0} olur. String[] isimler = new String[3]; // 3 elemanlı String dizisi oluşturuldu. Elemanlar {null, null, null} olur.
- Başlatma (Değerlerle Birlikte): Boyutu belirtmeden doğrudan başlangıç değerlerini vererek de başlatabilirsiniz. Boyut, verilen eleman sayısı kadar olur.
Java:int[] notlar = {90, 85, 92, 78}; // 4 elemanlı int dizisi oluşturuldu ve değer atandı. String[] renkler = {"Kırmızı", "Mavi", "Yeşil"}; // 3 elemanlı String dizisi.
- Elemanlara Erişim: Elemanlara 0'dan başlayan indeks numaralarıyla erişilir.
Java:int[] sayilar = {10, 20, 30}; System.out.println(sayilar[0]); // Çıktı: 10 (İlk eleman) System.out.println(sayilar[2]); // Çıktı: 30 (Üçüncü eleman) sayilar[1] = 25; // İkinci elemanın değerini değiştirme System.out.println(sayilar[1]); // Çıktı: 25 // System.out.println(sayilar[3]); // Hata verir! IndexOutOfBoundsException (Dizi boyutu 3, indeksler 0, 1, 2)
- Dizi Boyutunu Alma: Dizinin `length` özelliği ile boyutuna ulaşılır.
Java:int[] notlar = {90, 85, 92, 78}; System.out.println("Dizinin boyutu: " + notlar.length); // Çıktı: 4
- Dizi Üzerinde Döngü: Elemanları gezmek için for döngüsü kullanılır. Hem standart for hem de gelişmiş (enhanced) for kullanılabilir.
Java:String[] renkler = {"Kırmızı", "Mavi", "Yeşil"}; // Standart for döngüsü (indeks ile) System.out.println("Standart For ile Renkler:"); for (int i = 0; i < renkler.length; i++) { System.out.println(renkler[i]); } // Gelişmiş (Enhanced) for döngüsü (eleman ile) - Sadece elemanları okumak için ideal System.out.println("\nGelişmiş For ile Renkler:"); for (String renk : renkler) { // Dizideki her String eleman için döngü System.out.println(renk); }
3. Java Koleksiyonlar Çatısı (Collections Framework) ve ArrayList
Dizilerin sabit boyutlu olması, eleman ekleme veya silme gibi işlemleri verimsiz hale getirebilir. Java Koleksiyonlar Çatısı (Collections Framework), dinamik boyutlu ve daha esnek veri yapıları (`List`, `Set`, `Map` gibi arayüzler ve bunların farklı implementasyonları) sunar.
Bu çatı altındaki en yaygın kullanılan yapılardan biri `ArrayList`'tir. `ArrayList`, `List` arayüzünün bir implementasyonudur ve dinamik olarak büyüyüp küçülebilen, sıralı, elemanların tekrar edebildiği bir listedir.
- `ArrayList` Tanımlama ve Başlatma: `java.util` paketindedir, bu yüzden import edilmesi gerekir. Generic yapılar kullanır (`<DataType>`) listede hangi tip verinin saklanacağını belirtir.
Java:import java.util.ArrayList; // ArrayList sınıfını içe aktar // String tipinde elemanlar tutacak bir ArrayList oluşturma ArrayList<String> sehirler = new ArrayList<>(); // Integer tipinde elemanlar tutacak bir ArrayList oluşturma ArrayList<Integer> numaralar = new ArrayList<>();
- Yaygın `ArrayList` Metotları:
- `add(element)`: Listenin sonuna eleman ekler.
- `add(index, element)`: Belirtilen indekse eleman ekler, diğer elemanları kaydırır.
- `get(index)`: Belirtilen indeksteki elemanı döndürür.
- `set(index, element)`: Belirtilen indeksteki elemanın değerini değiştirir.
- `remove(index)`: Belirtilen indeksteki elemanı siler.
- `remove(object)`: Belirtilen ilk eşleşen elemanı siler.
- `size()`: Listedeki eleman sayısını döndürür (dizideki `length` gibi).
- `clear()`: Listenin tüm elemanlarını siler.
Java:import java.util.ArrayList; public class ArrayListOrnegi { public static void main(String[] args) { ArrayList<String> alfabem = new ArrayList<>(); // String tutan ArrayList alfabem.add("A"); // Sona 'A' ekle alfabem.add("C"); // Sona 'C' ekle alfabem.add(1, "B"); // 1. indekse (ikinci sıraya) 'B' ekle System.out.println("Liste: " + alfabem); // Çıktı: Liste: [A, B, C] System.out.println("Listenin boyutu: " + alfabem.size()); // Çıktı: Listenin boyutu: 3 System.out.println("1. indeksteki eleman: " + alfabem.get(1)); // Çıktı: 1. indeksteki eleman: B alfabem.set(0, "X"); // 0. indeksteki elemanı 'X' ile değiştir System.out.println("Liste Set Sonrası: " + alfabem); // Çıktı: Liste Set Sonrası: [X, B, C] alfabem.remove(2); // 2. indeksteki elemanı sil ('C') System.out.println("Liste Index Remove Sonrası: " + alfabem); // Çıktı: Liste Index Remove Sonrası: [X, B] alfabem.remove("X"); // 'X' elemanını sil System.out.println("Liste Object Remove Sonrası: " + alfabem); // Çıktı: Liste Object Remove Sonrası: [B] // Liste üzerinde döngü System.out.println("\nListe Elemanları:"); for (String harf : alfabem) { // Gelişmiş for ile System.out.println(harf); } alfabem.clear(); // Tüm elemanları sil System.out.println("Liste Clear Sonrası: " + alfabem); // Çıktı: Liste Clear Sonrası: [] } }
4. Diziler ve ArrayList Karşılaştırması (Temel Farklar)
- Boyut: Diziler sabit boyutludur, `ArrayList` dinamik olarak büyüyüp küçülebilir.
- Performans: Dizilere indeks ile erişim genellikle `ArrayList`'ten daha hızlıdır. Ancak `ArrayList`'e eleman ekleme/silme (özellikle ortalardan) dizilere göre daha maliyetli olabilir (elemanların kaydırılması gerektiği için).
- Kullanım: Boyutu kesin olarak bildiğiniz ve sık sık eleman ekleme/silme yapmayacağınız durumlar için diziler uygun olabilir. Boyutun değişebileceği ve esnekliğin gerektiği çoğu senaryoda `ArrayList` daha kullanışlıdır.
Sıra Sizde![/B]
Java'da birden fazla değeri bir arada tutmanın iki temel yolu olan diziler ve `ArrayList`'i gördük.
- Farklı tiplerde (int, double, String) Java dizileri tanımlayıp başlatın. İndekslerle elemanlarına erişin ve değerlerini değiştirin. Dizinin `length` özelliğini ve döngüleri kullanarak elemanları yazdırın.
- Farklı tiplerde elemanlar tutan `ArrayList`'ler oluşturun. `add()`, `get()`, `set()`, `remove()`, `size()` gibi metotları kullanarak listeyi yönetin ve elemanlarını döngü ile yazdırın.
- Kendi kendinize, bir senaryo belirleyip (örneğin, "alışveriş sepetindeki ürünler" veya "sıradaki müşteriler" gibi) bu senaryoda dizi mi yoksa `ArrayList` mi kullanmanın daha mantıklı olacağını düşünün.
- Denemeleriniz sırasında `IndexOutOfBoundsException` hatasını bilerek oluşturmayı ve hata mesajını okumayı deneyin.
Serinin Geleceği?[/B]
Java'da temel çoklu veri yapıları olan diziler ve `ArrayList`'i gördük. Java Koleksiyonlar Çatısı çok daha zengindir.
Seriyi buradan sonra nasıl devam ettirelim?
- Java Koleksiyonlar Çatısındaki diğer yapılar (LinkedList, HashSet, HashMap gibi) ve Iterators?
- Java'da String metotları ve yaygın kullanılan yardımcı sınıflar?
- Java Dosya İşlemleri (File I/O) ve Hata Yönetimi (Exception Handling) derinlemesine?
- Temel Veri Yapıları ve Algoritmalar (Bağlı Listeler, Ağaçlar vb.)?
- Başka bir programlama diline giriş (C#, C++ gibi)?
- Web geliştirme Frameworklerine giriş (Java Spring/Spring Boot, Python Flask/Django, JS React/Vue/Angular, PHP Laravel/Symfony)?
- Mobil geliştirme temelleri (Android Studio ile)?
- Veya başka önerileriniz mi var?
Umarım bu konu Java'da birden fazla veriyle çalışmaya başlarken faydalı olmuştur. Görüşmek üzere!
Bu konu, "Hazır Kod Bankası" serisinin on dokuzuncu parçasıdır ve "Yazılım Bilgi ve Yeni Başlayanlar İçin" kategorisi altında paylaşılmıştır.