C# Koleksiyonlar (System.Collection)



Koleksiyonlar System.Collection namespace'i altında bulunan veri saklama sınıflarımızdır.

Koleksiyonlar :
  • ArrayList
  • SortedList
  • HashTable
  • BitArray
  • Stack
  • Queue
Bunların System.Array altında bulunan klasik arraylar gibidir fakat arraylarda kullanamadığımız bir çok metodu bu sınıflarda kullanabiliriz. Ayrıca arraylarda var olan oluştururken boyutunu verme zorunluğu veya boyutunu aşınca hata vermesi gibi canımızı sıkan şeyler burada yoktur. Fakat arraylar oluşturulurken boyutu verildiği için her nekadar bellekte yer kaplıyor desekte casting işlemi yapılmadığı için yinede bir artısı vardır.

  • Array : 
Yukarda bahsettiğimiz klasik arraydır. Oluşturulurken boyutunun verilmesi gerekmektedir. Boyuntunu aşınca hata verir. Array sınıfı abstract bir sınıftır yani kullanılacağı zaman new sözcüğü ile instance'ının yaratılmasına gerek yoktur.Add, Remove, Sort,IndexOf, FindIndex gibi Collectionlarda kullandığımız metodlara sahip değildir. Bu yüzden esnek bir yapıya sahip değildir.

  • ArrayList :  
Index-base bir yapıdır. Aslında Array gibidir fakat klasik Array'dan farkı oluşturulurken boyutunu vermemize gerek yoktur.Add metodu ile yeni öğeler eklendikçe boyutunu otomatik artar. Bu yüzden bellekte boşuna yer kaplamaz bu bakımdan iyidir fakat sadece object tipinde veriler sakladığı için obje dışında bir öğe eklenince boxing işlemi yani gönderilen öğenin objeye çevirilme işleminin yapılması zorunludur. Bunu kendi içinde yapar fakat bu işlem performans kaybına neden olur.Add, Remove, Sort,IndexOf, FindIndex gibi metodları kullanabiliriz. Object nesneler tuttuğu için programımızda kullandığımız bir stringle bir inti ayni Arraylist içine atabiliriz. Bu string ve int arraylist tarafından objeye çevirip saklanır.
  • SortedList :
Key/Value adında iki adet veri barındırırlar. Verilere verdiğiniz  bu "Key" değeri ile ulaştıkları için unique olmalıdır. Bu yüzden "Key" NULL olamaz.Sıralamayıda bu "Key" değerlerini kullanarak yaparlar.Alfabetik bir sıralama söz konusudur. IndexOfKey, IndexOfValue, RemoveAt, GetByIndex, SetByIndex gibi metodlara sahip olduğu için esnek bir yapısı vardır. SortedList kullanımına bir örnek verecek olursak:




SortedList sortedList = new SortedList();
sortedList.Add("5", "unel");
sortedList.Add("4", "blog");
sortedList.Add("1", true);
sortedList.Add("3", "safak");
sortedList.Add("2", "2");
sortedList.Add("6", 123);
sortedList.Add("a", ".net dersleri");
sortedList.Add("c", "öğren");
sortedList.Add("z", "koleksiyonlar");

int sayac = 0;
foreach (object obc in sortedList.Values)
{
sayac++
Console.WriteLine(sayac + ". sıradaki veri = " + obc.ToString());
}
Şeklinde bir deneme yaparsak sonucumuz şöyle olacaktır:

C# Koleksiyonlar (System.Collection),java,c#,object orieneted,nesneye yönelik programlama,nesneye yönelik programlama dersleri,nesneye yönelik programlama nedir?


  • HashTable :
Yapı olarak SortedListe benzer yine Key/Value yapısı vardır. Farkı sıralamayı alfabetik olarak değil "Key" üzerindeki Hash kodlarına göre yapmasıdır. Bu özelliği onu hız bakımından SortedList'in önüne geçirsede sıraladığı veriler karmaşık olur bu kötü bir özelliğidir. Ayrıca IndexOfKey, IndexOfValue, RemoveAt, GetByIndex, SetByIndex gibi metodlar HashTable'de mevcut değildir bu yüzden SortedList HashTable'a göre daha esnek bir yapıya sahiptir. SortedList ile yaptığımız sıralamayı şimdi birde Hashtable için deneyelim :


Hashtable hashTable= new Hashtable();
hashTable.Add("5", "unel");
hashTable.Add("4", "blog");
hashTable.Add("1", true);
hashTable.Add("3", "safak");
hashTable.Add("2", "2");
hashTable.Add("6", 123);
hashTable.Add("a", ".net dersleri");
hashTable.Add("c", "öğren");
hashTable.Add("z", "koleksiyonlar");

int sayac = 0;
foreach (object obc in hashTable.Values)
{
sayac++;
Console.WriteLine(sayac + ". sıradaki veri = " + obc.ToString());
}
Bu durumdaki ekran çıktımız :

C# Koleksiyonlar (System.Collection),java,c#,object orieneted,nesneye yönelik programlama,nesneye yönelik programlama dersleri,nesneye yönelik programlama nedir?

Görüldüğü gibi ayni veriler bir SortedList birde HashTable ile sıralandı ve iki farklı sonuç elde edildi. Bu iki sıralamanın farklı sonuçlar vermesinin nedeni SortedList önce numerik key değerlerini küçükten büyüğe sıralar sonrasında kalanları alfabetik sıraya göre sıralar. HashTable ise key değerinin hash kodunu elde edip sıraladığı için belirli bir sırası yoktur.

  • BitArray :
Değişkenlerin Bit değerleriyle işlem yapılmak isteniyorsa tercih edilmelidir.int,boolean ve byte tiplerine izin verir.Arraylar gibi oluşturulurken boyut vermek zorunludur.
  • Stack:

Stack LIFO (Last In First Out) mantığıyla çalışır yani Stack'a son giren ilk çıkar, Görüldüğü gibi veriler üzerinde dolaşmaya imkan sağlamazlar. Stack yapısını bir depoya benzetebiliriz. Bir depo düşünün bu depoya mallar en son eklenen malın arkasına gelecek şekilde eklenir ve bir mal çıkarılacaksa ilk giren mala ulaşılamaz en son konulan mal çıkarılır. Yani son giren ilk çıkar. Bu yapıda içindeki verilerde dolaşma imkanı yoktur. Sadece en sondaki veriye ulaşılabilir. Boyut belirtme zorunluluğu yoktur, veri geldikçe kendi otomatik olarak arttırır.

  • Queue: 

Queue ise FIFO(First In Fırst Out) mantığıyla çalışır Queue'de ise ilk giren ilk çıkar kuyruk yapısıda diyebiliriz. Bunuda bir banka kuyruğuna benzetebiliriz. Bankaya gittiğimizde sıraya gireriz ve bankaya ilk gelen ilk çıkar. Bunun dışında Stack yapısıyla ayni özelliklere sahiptir. Yine veriler üzerinde gezme yoktur, boyut belirtme zorunluluğu yoktur, veri geldikçe kendi otomatik olarak arttırır.

1 yorum :