C# koleksiyonları, birden fazla öğeyi dinamik olarak saklamaya olanak tanıyan güçlü ve esnek veri yapılarıdır. Diziler sabit boyutlu olduğu için yeterli gelmediği durumlarda koleksiyonlar devreye girer. Koleksiyonlar, veri ekleme, çıkarma, arama, sıralama gibi işlemler için gelişmiş yöntemler sunar.
Bu yazıda, C# koleksiyonlarının temel kavramlarını, türlerini ve örneklerini ele alacağız.
1. C# Koleksiyonlarının Özellikleri
- Dinamik Yapı: Koleksiyonlar, eleman sayısına bağlı olarak boyutlarını otomatik olarak ayarlar.
- Esneklik: Farklı veri türlerini depolayabilen genel (generic) ve genel olmayan (non-generic) koleksiyonlar vardır.
- Sınıf Tabanlıdır: Tüm koleksiyonlar
System.Collections
veyaSystem.Collections.Generic
ad alanında tanımlıdır.
2. Koleksiyon Türleri
a. Genel Olmayan Koleksiyonlar (Non-Generic Collections)
Bu tür koleksiyonlar, herhangi bir veri tipine izin verir, ancak tür güvenliği sağlamaz.
- ArrayList: Dinamik olarak büyüyen bir liste.
- Hashtable: Anahtar-değer çiftlerini depolamak için kullanılır.
- Queue: İlk giren ilk çıkar (FIFO) mantığıyla çalışan bir yapı.
- Stack: Son giren ilk çıkar (LIFO) mantığıyla çalışan bir yapı.
// ArrayList örneği
ArrayList list = new ArrayList();
list.Add(10);
list.Add("Metin");
list.Add(3.14);
foreach (var item in list)
{
Console.WriteLine(item);
}
b. Genel Koleksiyonlar (Generic Collections)
Generic koleksiyonlar, tür güvenliği sağlar ve daha verimli çalışır.
- List<T>: Dinamik liste yapısı.
- Dictionary<TKey, TValue>: Anahtar-değer çiftlerini saklar.
- Queue<T>: Generic FIFO koleksiyon.
- Stack<T>: Generic LIFO koleksiyon.
- HashSet<T>: Tekrarlayan elemanları engelleyen koleksiyon.
// List<T> örneği
List<int> sayilar = new List<int> { 1, 2, 3, 4, 5 };
sayilar.Add(6);
foreach (int sayi in sayilar)
{
Console.WriteLine(sayi);
}
3. Önemli Koleksiyon Türleri ve Kullanımları
a. List<T>
Dinamik bir liste yapısıdır. Eleman ekleme, çıkarma, arama gibi işlemleri kolayca yapabilirsiniz.
List<string> isimler = new List<string> { "Ahmet", "Mehmet", "Ayşe" };
isimler.Add("Fatma");
isimler.Remove("Mehmet");
foreach (var isim in isimler)
{
Console.WriteLine(isim);
}
b. Dictionary<TKey, TValue>
Anahtar-değer çiftleriyle çalışır.
Dictionary<int, string> kitaplar = new Dictionary<int, string>();
kitaplar.Add(1, "C# ile Programlama");
kitaplar.Add(2, "Veritabanı Yönetimi");
foreach (var kitap in kitaplar)
{
Console.WriteLine($"ID: {kitap.Key}, Adı: {kitap.Value}");
}
c. Stack <T>
Son giren ilk çıkar (LIFO) mantığıyla çalışır.
Stack<string> isimYigini = new Stack<string>();
isimYigini.Push("Ali");
isimYigini.Push("Veli");
isimYigini.Push("Can");
Console.WriteLine(isimYigini.Pop()); // Çıktı: Can
d. Queue<T>
İlk giren ilk çıkar (FIFO) mantığıyla çalışır.
Queue<int> kuyruk = new Queue<int>();
kuyruk.Enqueue(1);
kuyruk.Enqueue(2);
kuyruk.Enqueue(3);
Console.WriteLine(kuyruk.Dequeue()); // Çıktı: 1
e. HashSet
Tekrarlayan elemanları depolamaz.
HashSet<int> sayilar = new HashSet<int> { 1, 2, 2, 3, 4, 4, 5 };
foreach (var sayi in sayilar)
{
Console.WriteLine(sayi); // Çıktı: 1, 2, 3, 4, 5
}
4. Koleksiyonlarda Sık Kullanılan Metotlar
Metot | Açıklama |
---|---|
Add() | Koleksiyona yeni bir eleman ekler. |
Remove() | Koleksiyondan bir eleman siler. |
Contains() | Belirli bir elemanın olup olmadığını kontrol eder. |
Clear() | Koleksiyondaki tüm elemanları siler. |
Count | Koleksiyondaki eleman sayısını döner. |
5. Koleksiyon Kullanımında Dikkat Edilmesi Gerekenler
- Generic Koleksiyonları Tercih Edin: Tür güvenliği sağlar ve hata riskini azaltır.
- Bellek Yönetimi: Gereksiz koleksiyonları
Clear()
veyaDispose()
ile temizleyin. - Performans: Büyük veri setleri için doğru koleksiyon türünü seçmek önemlidir.