Yazılım Mimarileri ve Tasarım Desenleri Üzerine

C# Özelleştirilmiş Koleksiyonlar – System.Collections.Specialized

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.

Mobil sürümden çık