Bu yazımda C#’ta özelleştirilmiş koleksiyonları inceleyeceğiz.Özelleştirilmiş koleksiyonlar System.Collections.Specialized namespace i altında bulunurlar.ListDictionary,HybridDictionary,Queue ve Stack koleksiyonları mevcuttur.Şimdi gelin bu koleksiyon sınıflarını görelim.
ListDictionary
Küçük ölçekli koleksiyon yapısı kurmak isteniyorsa bu koleksiyon yapısı tercih edilebilir.Eğer koleksiyon yapısının key – value pairlerinden oluşmasını istiyorsak Hashtable ya da ListDictionary kullanabiliriz.Ama küçük ölçekli bir yapı ise ListDictionary tercih edilir.Çünkü daha hızlı çalışır.
ListDictionary listD = new ListDictionary();
listD.Add("Adı", "Gençay");
listD.Add("Soyadı","Yıldız");
listD.Add("Meslegi","Yazılım Uzmanı");
ListDictionary koleksiyonunu foreach döngüsünde dönmek istiyorsak eğer,koleksiyondaki elemanları DictionaryEntry almamız gerekiyor.(DictionaryEntry – System.Collections namespaceindedir.)DictionaryEntry sayesinde Key ve Value propertylerine ulaşabiliyoruz.
foreach (DictionaryEntry item in listD)
{
MessageBox.Show(item.Key + ":" + item.Value);
}
ListDictionary koleksiyonun Sort diye bir metodu yoktur.Fakat constructorında IComparer alan constructor mevcuttur.Ve bu constructorı kullanarak default sıralama kuralı belirlenebilir.
CaseInsensitiveComparer sirala = new CaseInsensitiveComparer();
ListDictionary listD = new ListDictionary(sirala);
HybridDictionary
HybridDictionary, ilk önce işe ListDictionary olarak başlar.Koleksiyon yapısı büyüdüğü zaman Hashtable olarak çalışmaya devam eder.
Queue
Queue koleksiyon yapısı FIFO(Firs In Firs Out – İlk Giren İlk Çıkar) mantığına göre çalışan bir koleksiyon yapısıdır.
Bu koleksiyona eleman Enqueue() metodu ile eklenir.
Queue listQ = new Queue();
listQ.Enqueue("A");
listQ.Enqueue("B");
listQ.Enqueue("C");
listQ.Enqueue(1);
listQ.Enqueue(2);
Koleksiyondan eleman çıkartmak için Dequeue() metodu kullanılır.Dequeue() metodu kaldıracağı elemanı,geri gönderir.Yani hem kaldırır, hem de kaldırdığını bize gönderir.
Queue listQ = new Queue();
listQ.Enqueue("A");
listQ.Enqueue("B");
listQ.Enqueue("C");
listQ.Enqueue(1);
listQ.Enqueue(2);
foreach (object item in listQ)
{
MessageBox.Show(item.ToString());
}
//Buraya kadar sırasıyla A,B,C,1 ve 2 olarak mesaj kutusunda elemanlar gözükecektir.
listQ.Dequeue();
foreach (object item in listQ)
{
MessageBox.Show(item.ToString());
}
//Burda ise Dequeue() metodu çalıştıktan sonra B,C,1 ve 2 olarak mesaj kutusunda elemanlar gözükecektir.
Peek() metodu, koleksiyonun ilk giren elemanını geri döner.Bu elemanı koleksiyondan çıkartmaz.Dolayısıyla Peek metodu ile sadece ilk giren elemana ulaşılabilir.
MessageBox.Show(listQ.Peek().ToString());
Stack
Stack koleksiyonu LIFO (Last In First Out – Son Giren İlk Çıkar) mantığına göre çalışır.
Push() metodu ile eleman eklenir.
Stack listS = new Stack();
listS.Push("A");
listS.Push("B");
listS.Push("C");
listS.Push(1);
listS.Push(2);
Pop() metodu ile en üstteki eleman(son eklenen) geri döner ve koleksiyondan çıkarılır.
Stack listS = new Stack();
listS.Push("A");
listS.Push("B");
listS.Push("C");
listS.Push(1);
listS.Push(2);
while (listS.Count >0)
{
MessageBox.Show(listS.Pop() + "-" + listS.Count);
}
Yukarıdaki kodları çalıştırırsak eğer, son giren eleman “2” Pop() metodu tarafından silinecek.Tabi Pop() metodu silerken geri “2” elemanını gönderecektir.Normalde 5 elemanlı olan koleksiyonumuz 4 elemana düşecektir ve ilk mesaj kutusunda “2-4” mesajını göreceğiz.Sonrakilerde “1-3″,”C-2″,”B-1” ve “A-0” mesajlarını göreceğiz.
Şimdilik bu kadar.
Bir sonraki yazımda görüşmek üzere.
İyi çalışmalar.