C# ArrayList Sınıfı

Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde ArrayList sınıfını anlatacağım. Hadi başlayalım !
ArrayList sınıfı, System.Collections kütüphanesi altında bulunan ve hem dizi hemde liste özelliği gösteren bir sınıftır. Yani hem dizilerin hemde listelerin özelliklerini gösterebilir. Liste ve dizilerde olduğu gibi tek boyutlu veri tutabilir, yani key-value çifti değilde sadece value değeri tutabilmektedir. Fakat farklı tipteki verileri tek koleksiyon içerisinde tutabiliriz. Liste ve dizilerden ayrılan ve bence en güzel özelliklerinden biride bu. Tabi kullanabilmek için öncelikle yeni ArrayList nesnesinin türetilmesi gerekmekte. E o zaman bir tane nesne oluşturalım.
ArrayList liste = new ArrayList();
Şimdide ArrayList sınıfına ait olan fonksiyon ve özellikleri sırayla görelim.
Add() Fonksiyonu: ArrayList içerisine veri eklemek için kullanılır. Bu ve bundan sonraki fonksiyon ve özellikler için örnek olarak kullanacağımız verileri ekleyelim.
liste.Add("SoftwareSup");
liste.Add("Net");
liste.Add(1.5)
Birden fazla aynı veriyi tutabilir, yani örneğin SoftwareSup verisini birden fazla kez ekleyebiliriz.
AddRange() Fonksiyonu: Tek seferde birden fazla veri eklemek için kullanılır ve ICollection tipinde bir tane parametre alır. Yani liste, dizi, ArrayList, HashTable, SortedList gibi liste yapılarından tek seferde veri ekleyebilirsiniz. Fakat örneğin HashTable veya SortedList ile veri eklemek istediğinizde bu yapılar 2 boyutlu veri tutabildiğinden her bir veri çifti farklı bir HashTable yada SortedList özelliği gösterir. Liste yada dizilerle ekleme yapmak istediğinizde ise bu yapılar tek bir veri tipinde veri aldığı için farklı tipteki verileri farklı liste yada dizi ile eklemeniz gerekmektedir. Örneğin az önceki eklememizi AddRange() fonksiyonu ile dizi kullanarak yapalım;
liste.AddRange(new[] { "SoftwareSup", "Net" } );
liste.Add(1.5);
SoftwareSup ve Net verileri string tipte olduğu için bunları yeni bir string dizisi ile ekledik fakat 1.5 verisi double tipte olduğu için onu ayrıca ekledik.
Insert() Fonksiyonu: Add() ve AddRange() fonksiyonları listenin sonuna ekleme yapıyor fakat biz örneğin 2. veriden sonra ekleme yapmak istersek burada bizi yarı yolda bırakıyor, tamda burada Insert() fonksiyonu yardıma koşuyor ve istediğimiz index numarasına sahip veriden sonra bir tane veri ekleyebilmemizi sağlıyor. Integer tipte veriyi eklemek istediğimiz index numarasını ve object tipte eklenecek veri olmak üzere 2 tane parametre alıyor. Örneğin SoftwareSup verisinden sonra C# verisini Insert() fonksiyonuyla ekleyelim.
liste.Insert(1, "C#");
InsertRange() Fonksiyonu: Insert() fonksiyonuyla aynı mantık ve kullanımı var fakat çoklu veri eklemek için kullanılan bu fonksiyona ekleme yapmak istediğimiz index numarasını ve ICollection tipinde eklenecek veriler olmak üzere 2 tane parametre alıyor. Tabi AddRange() fonksiyonunda olduğu gibi ICollection olarak liste ve diziler tek tipte veri aldığı için farklı tipteki verileri ayrıca ekleme yapmamız gerekecektir. Ayrıca HashTable yada SortedList gibi key-value çifti tutabilen listeler kullanırsakta eklenen veriler eklendikleri nesne gibi davranırlar; SortedList ise SortedList, HashTable ise HashTable. Örneğin az önce eklediğimiz C# verisinden sonra “programlama” ve “dili” verilerini de ekleyelim. Ama tabi InsertRange() fonksiyonuyla ekleyeceğiz.
liste.InsertRange(2, new[]{ "programlama", "dili" });
Remove() Fonksiyonu: Listelere ekleme yapılabildiği gibi elbette listeden çıkarma işlemi de yapılabiliyor ve ArrayList’te liste özelliği gösterdiği için liste içerisinden çıkarma işlemi yapılabilmekte. Silme işlemini object tipinde bir tane parametre göndererek yapabiliriz ve gönderdiğimiz parametre liste içerisinde ekli ise silinecek, ekli değilse herhangi bir işlem yapmayacaktır. Ayrıca fonksiyon void tipte olduğu için geriye herhangi birşey döndürmemektedir. Ayrıca veri silinirse ondan sonra gelen verilerin index numaralarını 1 azaltarak arada bir boşluk olmasını engelliyor. Örneğin bizim listemizdeki C# verisini silelim.
liste.Remove("C#");
RemoveAt() Fonksiyonu: Remove() fonksiyonu direk verinin kendisi üzerinden silme işlemi yaparken RemoveAt() fonksiyonu index numarası üzerinden silme yapıyor. Parametre olarak aldığı index numarasında bulunan elemanı listeden siliyor ve tabiki o veriden sonra gelen elemanlarıda bir sola kaydırarak listede boş kalan bi index numarası olmasını engelliyor.
RemoveRange() Fonksiyonu: Birbirini takip eden bir sırayı liste içerisinden silmek istiyorsanız RemoveRange() fonksiyonu bu iş için biçilmiş kaftan 🙂 Örneğin 2. indexten sonra (2. indexteki eleman dahil) 3 tane veriyi silmek istiyorsanız kullanabilirsiniz. Örneğin ben listemizdeki C#, programlama, dili verilerini silmek istiyorum diyelim (Listemiz içerisinde SoftwareSup, Net, 1.5, C#, programlama, dili verileri bulunmakta). C# verisi 3. indexte olduğu için ilk parametremiz 3, toplamda 3 tane veriyi silmek istediğim için de ikinci parametremizde 3’tür. Yani kodumuz şöyle olmakta;
liste.RemoveRange(3, 3);
Son olarak tıpkı Remove() ve RemoveAt() fonksiyonlarında olduğu gibi silinen elemanlardan sonra gelen elemanları index numaraları ardışık olacak şekilde tekrardan sıralıyor.
Count Özelliği: Liste içindeki eleman sayısını verir.
Contains() Fonksiyonu: Liste içerisinde arama yapılmasını sağlar. object tipte 1 tane parametre alır ve girilen değer liste içerisinde varsa true, yoksa false döndürür.
ToArray() Fonksiyonu: Yazımın başlarında ArrayList sınıfının dizi özelliğini gösterdiğini söylemiştim, işte bu fonksiyonla ArrayList nesnesini object dizisine (object[]) çevirir ve listeyi artık dizi gibi kullanabilmemizi sağlar. Geriye object dizisi döndürdüğü için yeni bir dizi oluşturulup liste içerisindeki veriler o diziye eklenir ve orijinal listede herhangi bir manipülasyon yapılmadığı için sonradan kullanılabilir.
GetRange() Fonksiyonu: Liste içerisinden liste almamızı sağlar. Integer tipte başlangıç indexi ve yine integer tipte alınacak eleman sayısını parametre olarak alır ve index numarasından başlayarak ikinci parametredeki eleman sayısı kadar elemanı ayrı bir ArrayList olarak geri döndürür. Orijinal liste üzerinde herhangi bir manipülasyon yapılmadığı için tekrardan kullanılabilir.
IndexOf() Fonksiyonu: Contains() fonksiyonu gibi liste içerisinde arama yapar fakat Contains() fonksiyonundan farklı olarak aranan veri liste içerisinde varsa bulunduğu index numarasını, yoksada -1 değerini döndürür.
LastIndexOf() Fonksiyonu: IndexOf() fonksiyonu ile aynı işlevi görür fakat aramaya listenin sonundan başlar fakat aranan veri liste içerisinde varsa normal index numarasını, yoksada -1 değerini döndürür. Yani sağdan sola arama yaparken soldan sağa doğru index numarasını bulur ve döndürür. Örneğin bizim listemizde (SoftwareSup, Net, 1.5) Net verisinin arka arkaya 2 tane olduğunu düşünelim. Yani { SoftwareSup, Net, Net, 1.5 } şeklinde olsun. Net verisini IndexOf() ile aradığımızda 1 değeri geriye döndürülürken LastIndexOf() ile aradığımızda 2 değeri döndürülmektedir.
Sort() Fonksiyonu: Liste içerisindeki verileri alfabetik olarak küçükten büyüğe sıralar. Fakat sıralama işleminin yapılabilmesi için liste içerisindeki elemanların hepsinin aynı tipte olması gerekmektedir. Yani hepsi string olmalı yada hepsi integer olmalı yada hepsi double olmalı, … gibi. Aksi takdirde InvalidOperationException istisnası fırlatacaktır. void tipte olduğu için geriye herhangi birşey döndürmez ve sıralama işlemini orijinal liste içerisinde yapar, yani liste üzerinde manipülasyon yapılır.
Reverse() Fonksiyonu: Listenin elemanlarını ters çevirir, yani sonuncu elemanı en başa, en baştakini de en sona gelecek şekilde elemanların yerini değiştirir. 2 farklı kullanımı vardır. Birincisi parametre almayan halini kullanırsanız tüm listeyi ters çevirir, ikincisi ise sadece belirli bir aralıktaki elemanları ters çevirebilir. Integer tipindeki başlangıç index numarası ve integer tipteki eleman sayısı olmak üzere 2 parametre alan kullanımında (ikinci kullanım) listenin başından birinci parametreye kadar olan kısmı aynen bırakır. Birinci parametreden sonra ikinci parametre kadar elemanı ters çevirir ve sonra kalan elemanları yine aynı şekilde bırakır. Örneğin { SoftwareSup, Net, 1.5, C#, programlama, dili } şeklinde olan listemizin Net, 1.5 ve C# kısmını ters çevirelim yani listemizi { SoftwareSup, C#, 1.5, Net, programlama, dili } haline getirelim. Net verisinden sonra (Net verisi dahil) çevirme yapacağımız ve Net verisi listenin 1. indexinde olduğu için ilk parametremiz 1 olacak. Net’ten sonra 3 tane veriyi kapsayacağı içinde ikinci parametremiz 3 olacaktır. Yani kodumuz şöyle olmalı;
liste.Reverse(1, 3);
Fonksiyon void tipte olduğu için herhangi birşey geriye döndürmüyor ve ters çevirme işlemini orijinal liste üzerinde yapıyor. Yani listemiz üzerinde manipülasyon yapılmakta.
Clear() Fonksiyonu: Liste içindeki tüm elemanları siler, listeyi temizler.
Evet bu dersimizde bu kadardı, ArrayList sınıfını gayet iyi anladığınızı umuyorum 🙂 Tüm C# derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.