|
C#'da ArrayList Sınıfının Kullanımı |
|
Gönderiliyor lütfen bekleyin... |
|
|
Programların
çoğunda birden fazla aynı tipte değişkenlere ihtiyaç duyarız. Bu sorunun
çözümü olarak birçok dilde kullanılan veri yapıları ,dizilerdir. Bildiğimiz klasik
dizilerin programlama tekniklerine getirdikleri kolaylıkların dışında birtakım
kısıtlamaları da vardır. Bu makalede klasik dizilerde sık sık karşılaştığımız
çeşitli sorunları ve bu sorunları nasıl çözebileceğimizi inceleyeceğiz.
.NET platformunun
sınıf kitaplıklarında bulunan ve programcıların işlerini çok kolaylaştıran ArrayList
sınıfı ile klasik dizilerde karşılaştığımız sorunları nasıl çözeceğimizi göreceğiz.
Klasik
dizilerle çalışırken karşılaşabileceğimiz temel sorunları şu
şekilde sıralamak mümkündür:
- Dizilerin sınırları sabittir.
- Dizilerin tüm elemanları aynı türden olmalıdır.
- Kullanmadığımız dizi elemanlarından dolayı
bellek alanları gereksiz yere işgal edilmektedir.
Örneğin sayısını bilemediğimiz bir dizinin eleman
sayısını 500 olarak belirlediğimizi varsayalım. Çalışma zamanında dizimizin
sadece 10 elamanını kullandığımız durumda diğer 490 elemanlık bellek alanı boş
olarak kalır. Öte yandan dizimizde tutmak istediğimiz değişkenlerin sayısı 501
bir olduğu bir durumda "IndexOutOfRangeException" istisnai durumu ortaya çıkar
ve program bu hatadan dolayı sonlanır.
Mesela aşağıdaki kodu derlemeye çalışalım:
using System;
class CshaprNedirCom
{
static
void Main(string[] args)
{
int[]
intDizi= new int[10];
try
{
intDizi[20]=5;
}
catch(
Exception e)
{
Console.WriteLine(e.GetType());
}
Console.ReadLine();
}
}
|
Yukarıdaki programda intDizi
'mizi 10 eleman alacak şekilde tanımlamamıza rağmen bu
dizinin 20. elemanına ulaşıp ona birşeyler atamaya çalıştık. Bu durumda programımız çalışırken
hata verdi. Çünkü dizinin sınırları bellidir ve bu sınırların dışına çıkamıyoruz.
Eleman sayısı ihtiyacımıza göre değişen bir veri yapısı olması gerçekten
hoş olmaz mıydı? Evet C#'da böyle bir dizi yapımız var. Bunun ismi
ArrayList'tir.
ArrayList sınırları dinamik olarak değişebilen
diziler olarak tanımlanır. Bu veri yapısı .NET sınıf kütüphanesinin System.Collections
isim alanında bulunur. İsterseniz ArrayList'i nasıl kullanacağımızı bir
örnekle inceleyelim:
using
System;
using System.Collections; // ArrayList sınıfnı
kullanmak için
//
System.Collection isimalanını eklemeliyiz..
class
CshaprNedirCom
{
static void Main(string[] args)
{
ArrayList
aList= new ArrayList(); //
aList isimli ArrayList nesnesi oluşturalım.
//
aList nesnemize sırası ile 5, 8, 1, 17 ve 20 değerlerini
//
Add metodu ile ekleyelim.
aList.Add(5);
aList.Add(8);
aList.Add(1);
aList.Add(17);
aList.Add(20);
//
aList'in elemanlarını ekrana yazdıryoruz:
Console.WriteLine("\t
aList'in elemanları:");
foreach(int
eleman in aList)
Console.WriteLine(eleman);
//
aList dizimizden 8 ve 20 değerlerini çıkartalım:
aList.Remove(8);
aList.Remove(20);
//
aList dizimize 66 ve 4 değerlerini ekleyelim:
aList.Add(66);
aList.Add(4);
Console.WriteLine("\n\t
aList dizisinden 8 ve 20\' çıkartıp, 66 ve 4 ekledik:");
foreach(int
eleman in aList)
Console.WriteLine(eleman);
Console.ReadLine();
}
}
|
Yukarıdaki örneğimizde öncelikle ArrayList sınıfını kullanmak için NET sınıf
kütüphanesinin System.Collections isim alanınını kullanacağımızı using
System.Collections; ile bildiriyoruz. Main fonksiyonumuzun
içindeki ilk satırda, ArrayList
aList= new ArrayList() , aList ismini verdiğimiz
ArrayList sınıfından bir nesne oluşturuyoruz. aList nesnemizi oluşturduğunuz
satırdan sonraki beş satırda ArrayList sınıfının Add() metodu ile aList
adlı dizimize elemanları ekliyoruz.
Daha
sonra aList diziminizin elemanlarını ForEach
döngüsü ile tek tek ekrana yazdıyoruz. ArrayList sınıfındaki
bir nesnenin elemanlarını tek tek silmek için Remove() metodunu kullanırız.
Remove() metodu ile istediğimiz elemanı diziden atabiliriz. Biz de 8 ve
20 elemanlarını diziden attık. Son olarak dizimize 66 ve 20 elemanlarını ekleyip
dizinin son halini ekrana yazdırdık.
C#
dilinde normal diziler bildiğiniz gibi sadece aynı tipten verileri tutar. Ama
ArrayList sınıfına ait dizilerimiz her türlü nesneyi aynı dizi içinde tutabilir.
Yani aynı dizide int, float, ve string tiplerindeki değişkenleri
depolama şansımız var. Mesela aşağıdaki kod C# dili kuralları çerçevesinde geçerli
bir koddur:
ArrayList
karmaList= new ArrayList(); // karmaList isimli ArrayList nesnesi oluşturalım.
karmaList.Add("Ahmet");
karmaList.Add(12);
karmaList.Add(true);
karmaList.Add(32.4f);
karmaList.Add('c');
Bu
kod ile karmaList isimli ArrayList nesnemizin içinde string, int,
bool, float ve char tiplerinden oluşan verileri aynı anda saklarız.
ArrayList sınıfının bize sunduğu diğer bir güzel özellik ise tek bir komut ile
ArrayList dizimizin içerisindeki elemanları ters çevirebilmemizdir. Ters çevirme
işlemi için Reverse() metodu kullanılır. İsterseniz Reverse()
metodunu ve ArrayList'lerde nasıl birden farklı türdeki elemanları kullanacağımızı
bir örnekle inceleyelim:
using
System;
using System.Collections; // ArrayList sınıfnı
kullanmak için
//
System.Collection isimalanını eklemeliyiz..
class
CshaprNedirCom
{
static void Main(string[]
args)
{
// karmaList isimli ArrayList nesnesi oluşturalım.
ArrayList
karmaList= new ArrayList();
//
karmaList'e değişik tipte elemanlar ekliyoruz.
karmaList.Add("Ali");
karmaList.Add(23);
karmaList.Add(false);
karmaList.Add(52.8d);
karmaList.Add('r');
//
karmaList'in elemanlarını ekrana yazdırıyoruz:
Console.WriteLine("\t
karmaList'in elemanları:");
foreach(object
eleman in karmaList)
Console.WriteLine(eleman);
karmaList.Reverse();
// karmaList'imizi ters çeviriyoruz.
Console.WriteLine("\n
---> karmaList'in elemanları ve türleri <---");
foreach(object
eleman in karmaList)
Console.WriteLine("Türü:
{0,15} değeri: {1,7}",eleman.GetType(), eleman);
Console.ReadLine();
}
}
|
Yukarıdaki
programda karmaList isimli ArrayList sınfından bir nesne oluşturduktan
sonra onu değişik türlerden veriler ile doldurduk. Bu dizinin elemanlarını sıra
ile foreach döngüsü yardımıyla ekrana yazdırdık. karmaList.Reverse()
satırında ise dizimizi ters çevirdik. Son işimizde ise
karmaList dizisinin elemanlarını ekrana tek tek yazdırırken aynı zamanda eleman.GetType(
) her
elemanın türünü bulup yazdık.
Makalemizi
ArrayList sınıfının temel metodlarının tablosunu vererek bitirmek isterim. Bu
tablodaki metodların işimize yaracağı kanaatindeyim.
Add |
Bir
nesneyi ArrayList'in sonuna ekler. |
BinarySearch |
Sıralanmış
bir ArrayList içinde bir nesneyi Binary search algoritması kullanarak arar. |
Clear |
ArrayList'in tüm elemanlarını siler. Sıfırlar. |
Contains |
Herhangi
bir nesnenin ArrayList'in elemanı olup olmadığını kontrol eder. |
Insert |
Dizinin
sonuna değilde istediğimiz bir yerine indeksini belirterek eklememizi sağlar. |
Remove |
Herhangi
bir elemanı diziden siler. |
Reverse |
Diziyi
ters çevirir. |
Sort |
ArrayList'i
sıralar. |
Makale:
C#'da ArrayList Sınıfının Kullanımı C#, Visual C# ve .NET Ahmet Faruk Nacaroğlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|