Serdar YILMAZ
Bizimkisi Bir “Bug” Hikayesi...
Serdivan/Sakarya
Serdar Yılmaz C# – Koleksiyonlar

C# – Koleksiyonlar

Nesne yönelimli programlama ile birlikte sınıf(class) kavramıyla tanıştık ve sıkça kullandığımız metotları tekrar tekrar yazmak yerine, bir sınıf içerisinde, bir defaya mahsus yazarak kod kalabalığının önüne geçmiş olduk. Bu programcı olarak bizlerin, kod karmaşıklığını ve kalabalığını azaltmaya yönelik olarak kendimizce almış olduğumuz bir önlem. Kullanmış olduğumuz platformda, programcılar tarafından sıkça kullanılan veri yapılarını hazır bir şekilde sunarak, benzeri bir kolaylık sağlamakta.

Örnek vermek gerekirse;  Yığın ve Kuyruk programcılar tarafından sıkça kullanılan veri yapılarıdır. Bu veri yapılarına ait sınıfları her programcının yazmak zorunda kalması istenmeyen bir durumdur. Bu yüzden .Net Platformu programcılar tarafından sıkça kullanılan yapıları sisteme entegre ederek, hazır bir şekilde sunmaktadır. Platform tarafından bize sağlanan bu çözümleri Koleksiyon Sınıfları başlığı altında ele alacağız.

Koleksiyonların Sağladığı Avantajlar

Bir dizi nasıl birden fazla elemanı temsil ediyorsa, bir koleksiyon nesnesi de aynı şekilde birden fazla nesneyi temsil etmektedir. Diziler ile koleksiyonlar arasındaki farklılıklardan bahsedecek olursak;

  1. Diziler sabit boyutludur ve eleman sayısının önceden belirtilmesi gerekir. Koleksiyonlar ise dinamik yapıdadır yani sabit boyutlu değildir. Eleman eklendikçe boyutu dinamik olarak artmaktadır.
  2. Diziler aynı veri tipindeki elemanları içermektedir. Koleksiyonlarda ise böyle bir kısıtlama bulunmamaktadır. Farklı veri tipindeki elemanları genel amaçlı koleksiyonlar üzerinde tutabiliriz.

Koleksiyonların Dezavantajları

.Net Platformunda kullanmış olduğumuz veri tipleri, Değer tipleri ve Referans tipleri olarak ikiye ayrılmaktadır. Değer Tipleri stack bölgesinde tutulurken, Referans Tipleri heap bölgesinde tutulmaktadır.

  1. Değer Tipleri: “int”, “long”, “float”, “double”, “decimal”, “char”, “bool”, “byte”, “short”, “struct”, “enum”
  2. Referans Tipleri: “string”, “object”, “class”, “interface”, “array”, “delegate”, “pointer”

Bir Değer Tipinin, Referans Tipine dönüştürülmesi işlemine Boxing, tersi bir işlemede Unboxing denmektedir. Koleksiyonlar verileri object olarak tutmaktadır. Bu yüzden koleksiyonlara her değer tipli eleman eklediğimizde Boxing işlemi gerçekleşecektir. Yani verimiz object’e dönüştürülecektir. Koleksiyona eklenen verileri değer tipli bir değişene aktarmak istediğimizde de Unboxing işlemi gerçekleşecektir. Koleksiyonun eleman sayısındaki artışa bağlı olarak boxing ve unboxing işlemleri artacaktır ve buna bağlı olarak da uygulamamızın performansı düşecektir. Özetleyecek olursak; 🙂

Boxing ve Unboxing işlemlerinin performans üzerindeki etkisini daha detaylı incelemek için bu bağlantıyı ziyaret edebilirsiniz.

Koleksiyon Tipleri

.Net Platformu 3 koleksiyon tipini desteklemektedir.

  1. Genel Amaçlı Koleksiyonlar: Her tipten veriyi saklamak için kullanılabilirler.
  2. Özel Amaçlı Koleksiyonlar: Belirli bir veri tipi veya çalışma şekli için optimize edilmişlerdir.
    • CollectionsUtil
    • ListDictionary: Anahtar-Değer çiftlerini bir bağlı liste içinde saklar. Küçük veri kümeleri için tercih edilir.
    • HybridDictionary: Belirli bir büyüklüğü geçene kadar Anahtar-Değer çiftlerini ListDictionary koleksiyonunda tutmaktadır, geçtikten sonra otomatik olarak bir Hashtable koleksiyonuna geçiş yapar.
    • • NameValueCollection: Anahtar-Değer çiftlerinin her ikisininde string tipinde olduğu durumlarda tercih edilebilir.
    • StringCollection: Karakter katarlarını saklamak için optimize edilmiş bir koleksiyondur.
    • StringDictionary: Anahtar-Değer çiftlerinin her ikisininde string tipinde olduğu bir hash tablodur. Anahtar-Değer çiftleri küçük harflere çevrilerek saklanır.
  3. Bit Tabanlı Koleksiyonlar: İsminden de anlaşılacağı üzere bu koleksiyonlar bir grup biti içerisinde saklamaktadır. Bit tabanlı koleksiyonlara örnek olarak BitArray‘i verebiliriz. BitArray bitleri saklamak haricinde VE – VEYA gibi mantıksal işlemleri de gerçekleştirebilmektedir.

Bu yazımızda koleksiyonlar hakkında genel bir bilgi verdik, bir sonraki yazımızda Koleksiyon arayüzlerinden ve sınıflarından bahsedeceğiz.

Yazar: Serdar Yılmaz

9 Yorum

Bir Yorum Yapın