﻿
{"id":287,"date":"2012-03-21T00:44:07","date_gmt":"2012-03-21T00:44:07","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=287"},"modified":"2012-05-28T12:59:20","modified_gmt":"2012-05-28T12:59:20","slug":"cta-non-generic-koleksiyon-yapilari-system-collections","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-non-generic-koleksiyon-yapilari-system-collections\/","title":{"rendered":"C# Non-Generic Koleksiyon Yap\u0131lar\u0131 &#8211; System.Collections"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda C#&#8217;ta koleksiyon yap\u0131lar\u0131ndan bahsedece\u011fim..NET Framework i\u00e7inde koleksiyon yap\u0131lar\u0131 System.Collections namespace i alt\u0131nda bulunan veri saklama s\u0131n\u0131flar\u0131d\u0131r.\u0130ki t\u00fcr koleksiyon yap\u0131s\u0131 vard\u0131r.Non-Generic ve Generic koleksiyonlar.Ben bu yaz\u0131mda Non-Generic koleksiyonlardan bahsedece\u011fim.Bu koleksiyon s\u0131n\u0131flar\u0131;ArrayList,SortedList ve HashTable d\u0131r.Bu koleksiyonlar klasik diziler gibidirler.Ancak dizilerde(Array) kullanamad\u0131\u011f\u0131m\u0131z bir \u00e7ok \u00f6zelli\u011fi bu koleksiyon yap\u0131lar\u0131nda kullanabiliyoruz.<br \/>\n<!--more--><br \/>\nNeden diziler de\u011filde koleksiyon yap\u0131lar\u0131n\u0131 tercih etmemiz gerekiyor?<br \/>\nBir dizi olu\u015ftururken eleman say\u0131s\u0131n\u0131 belirtmemiz gerekiyor.Eleman say\u0131s\u0131n\u0131 a\u015farsak e\u011fer, bize hata veriyor.Bu da bizi hem s\u0131n\u0131rl\u0131yor, hem de verdi\u011fimiz o boyutta bellekte yer kapl\u0131yor.Ancak bir koleksiyon yap\u0131s\u0131nda, biz o koleksiyona eleman verdik\u00e7e boyutu dinamik \u015fekilde ayarlan\u0131r.<br \/>\n\u015eunuda belirtmek istiyorum.Her ne kadar dizilerde bizi s\u0131n\u0131rl\u0131yor ve bellekte yer kapl\u0131yor desekte,sonucta tek bir tipten dizi olu\u015fturabildi\u011fimiz i\u00e7in Casting i\u015flemi hi\u00e7 yap\u0131lm\u0131yor.Ancak Non-Generic koleksiyonlarda object tipten eleman ald\u0131\u011f\u0131 i\u00e7in Boxing-Unboxing i\u015flemleri uygulamak zorunda kal\u0131yoruz.Buda Non-Generic koleksiyonlara kar\u015f\u0131 bir art\u0131s\u0131 var demektir.<br \/>\nAsl\u0131nda bu yaz\u0131mda sadece Non-Generic koleksiyonlardan bahsedece\u011fim ama Generic koleksiyonlar hakk\u0131nda da bilgi vermeden yapamayaca\u011f\u0131m.G\u00fcn\u00fcm\u00fczde genellikle Non-Generic koleksiyonlar yerine Generic koleksiyonlar tercih edilir.\u00c7\u00fcnk\u00fc yukar\u0131da bahsetti\u011fimiz gibi Non-Generic koleksiyonlarda object tiple \u00e7al\u0131\u015f\u0131rlar ve s\u00fcrekli Boxing ve Unboxing i\u015flemleri yap\u0131l\u0131r.Yani tip g\u00fcvenli de\u011fildir.Fakat Generic&#8217;ler i\u00e7lerinde olacak tiplerin ne oldu\u011funu belirtebilece\u011fimiz i\u00e7in tip g\u00fcvenlidirler(Generic koleksiyonlara ilerideki yaz\u0131lar\u0131mda de\u011finece\u011fim.).Buda \u015funu g\u00f6steriyor ki,dizi yerine Generic koleksiyon kullanmak,bizlere daha esnek yap\u0131 sunacakt\u0131r.<\/p>\n<p>Bir sonraki sayfada System.Collections isim alan\u0131yla ilgili a\u00e7\u0131klama yapaca\u011f\u0131m.<br \/>\n<!--nextpage--><br \/>\n<strong>System.Collections \u0130sim Alan\u0131<\/strong><br \/>\nNon-Generic koleksiyonlar\u0131n bulundu\u011fu bir namespacedir.<br \/>\nSystem.Collections isim alan\u0131nda bir \u00e7ok aray\u00fcz bulunmaktad\u0131r.<br \/>\nBu aray\u00fczlerin ne olduklar\u0131n\u0131 ve ne i\u015fe yarad\u0131klar\u0131n\u0131 inceleyelim..<br \/>\n\u00d6ncelikle \u015funu belirtmek istiyorum ki,b\u00fct\u00fcn koleksiyon s\u0131n\u0131flar\u0131 birazdan anlatmaya ba\u015flayaca\u011f\u0131m aray\u00fczlerden bir ya da birden fazlas\u0131n\u0131 uygulam\u0131\u015ft\u0131r.\u0130leride g\u00f6rece\u011fimiz koleksiyon s\u0131n\u0131flar\u0131n\u0131n ortak \u00f6zellik ve metodlar\u0131n\u0131n sebebi, uygulanan aray\u00fczlerin ayn\u0131 olmas\u0131d\u0131r.<br \/>\n<strong>ICollection<\/strong><br \/>\nBu aray\u00fcz, bir koleksiyonda olabilecek en temel metod ve propertyleri i\u00e7erir.System.Collection isim alan\u0131nda bulunan t\u00fcm s\u0131n\u0131flar bu aray\u00fcz\u00fc uygulam\u0131\u015ft\u0131r.ICollection aray\u00fcz\u00fc,IEnumerable aray\u00fcz\u00fcnden kal\u0131t\u0131m alm\u0131\u015ft\u0131r.Bu sebepten dolay\u0131 ICollection aray\u00fcz\u00fcn\u00fc uygulayan s\u0131n\u0131flar,IEnumerable aray\u00fcz\u00fcn\u00fcde uygulamak zorundad\u0131r.<\/p>\n<hr \/>\n<p><strong>IComparer<\/strong><br \/>\nBirden fazla nesnenin s\u0131ralanabilmesi i\u00e7in nesnelerin kar\u015f\u0131la\u015ft\u0131r\u0131labilir olmas\u0131 gerekiyor.\u00d6rne\u011fin, bir say\u0131 di\u011fer say\u0131dan ya daha b\u00fcy\u00fckt\u00fcr, ya daha k\u00fc\u00e7\u00fckt\u00fcr ya da e\u015fittir.Bu mant\u0131kla bir int dizisi s\u0131ralanabilir.Ayn\u0131 kar\u015f\u0131la\u015ft\u0131rma mant\u0131\u011f\u0131 string ifadeler i\u00e7inde ge\u00e7erlidir.&#8221;Ahmet&#8221; her zaman &#8220;Mustafa&#8221; dan \u00f6nce gelir.Buradada alfabetik kar\u015f\u0131la\u015ft\u0131rma s\u00f6z konusudur.<\/p>\n<p>Peki yaratt\u0131\u011f\u0131m\u0131z herhangi bir class\u0131n birden fazla nesnesini nas\u0131l s\u0131ralayabiliriz.\u00d6rne\u011fin, &#8220;Personel&#8221; isimli bir class\u0131m\u0131z var.Ve bu classta &#8220;PersonelAdi&#8221;,&#8221;PersonelSoyadi&#8221; ve &#8220;PersonelID&#8221; ad\u0131nda \u00fc\u00e7 tane property mevcut.Bu \u00f6zelliklerdeki class\u0131m\u0131zdan be\u015f tane nesne olu\u015fturuyorum.Bu nesneleri nas\u0131l s\u0131ralayabilirim.Program bunlar\u0131 &#8220;PersonelAdi&#8221; na g\u00f6remi,&#8221;PersonelSoyadi&#8221; na g\u00f6remi yoksa &#8220;PersonelID&#8221; sine g\u00f6remi s\u0131ralayacak.\u0130\u015fte bu sorunu bu aray\u00fcz sayesinde \u00e7\u00f6zebiliyoruz.<\/p>\n<hr \/>\n<p><strong>IDictionary<\/strong><br \/>\nBu aray\u00fcz\u00fc bir key &#8211; value ikilisi gibi \u00e7al\u0131\u015fan koleksiyon s\u0131n\u0131flar\u0131 uygularlar.HashTable gibi koleksiyon tiplerini anlat\u0131rken key &#8211; value ikilisinin ne demek oldu\u011funu anlayacaks\u0131n\u0131z.IDictionary aray\u00fcz\u00fc ICollection aray\u00fcz\u00fcnden t\u00fcremi\u015ftir.Bu y\u00fczden IDictionary aray\u00fcz\u00fcn\u00fc uygulayan bir s\u0131n\u0131f ICollection aray\u00fcz\u00fcndeki metod ve propertyleri de uygulamal\u0131d\u0131r.<\/p>\n<hr \/>\n<p><strong>IDictionaryEnumerator<\/strong><br \/>\nBu aray\u00fcz ile key &#8211; value ikili \u00e7iftlerden sadece key, sadece value ya da hem key hem value anahtar \u00e7iftlerini elde etmek i\u00e7in Value, Key ve Entry isimli 3 tane \u00f6zellik bulunur.<\/p>\n<hr \/>\n<p><strong>IEnumerable<\/strong><br \/>\nBir koleksiyon tabanl\u0131 s\u0131n\u0131f\u0131n elemanlar\u0131 aras\u0131nda ilerlemek i\u00e7in kullan\u0131lan GetEnumerator() metodunu tan\u0131mlar.<\/p>\n<hr \/>\n<p><strong>IEnumerator<\/strong><br \/>\nBir koleksiyon s\u0131n\u0131f\u0131 i\u00e7in koleksiyondaki her bir elemana eri\u015fmek ve di\u011fer i\u015fleri yapmak i\u00e7in uygulanmas\u0131 gereken aray\u00fczd\u00fcr.<br \/>\nKoleksiyonlar i\u00e7indeki elemanlar for,foreach ile d\u00f6n\u00fclebilir.Ayn\u0131 zamanda IEnumarator referans\u0131 \u00fczerinden de d\u00f6n\u00fclebilir.GetEnumarator() metodu ile koleksiyonun IEnumarator&#8217;\u00fc talep edilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            for (int i = 1; i &lt;= 5; i++)\r\n            {\r\n                liste.Add(i);\r\n            }\r\n<\/pre>\n<p>Yukar\u0131daki kodu incelerseniz,liste ad\u0131ndaki ArrayList&#8217;imiz 1&#8217;den 5&#8217;e kadar dolduruluyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            IEnumerator elemanlar = liste.GetEnumerator();\r\n<\/pre>\n<p>ArrayList i\u00e7indeki elemanlara teker teker ula\u015fabilmek i\u00e7in IEnumerator aray\u00fcz\u00fcn\u00fcn referans\u0131na ihtiya\u00e7 duyuyoruz.GetEnumerator() metoduyla veriler teker teker ula\u015f\u0131yoruz.<br \/>\nArt\u0131k ArrayList i\u00e7indeki elemanlara IEnumerator aray\u00fcz\u00fc tipinden olan &#8220;elemanlar&#8221; referans\u0131ndan ula\u015fmak m\u00fcmk\u00fcn.<br \/>\n\u015eimdi &#8220;elemanlar&#8221; referans\u0131m\u0131z\u0131n metod ve \u00f6zelliklerine bakal\u0131m.<br \/>\n<em>MoveNext()<\/em> metodu : Kolesiyon i\u00e7inde dola\u015facak ba\u015fka eleman var m\u0131? diye sorar.Varsa True yoksa False d\u00f6nd\u00fcr\u00fcr.<br \/>\n<em>Current<\/em> \u00f6zelli\u011fi : O an \u00fczerinde bulunulan eleman\u0131 verir.<br \/>\n<em>Reset()<\/em> metodu : Koleksiyonun ilk eleman\u0131na kafay\u0131 konumland\u0131r\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            while (elemanlar.MoveNext())\r\n            {\r\n                MessageBox.Show(elemanlar.Current + &quot;&quot;);\r\n                if ((int)elemanlar.Current == 5)\r\n                {\r\n                    elemanlar.Reset();\r\n                }\r\n            }\r\n<\/pre>\n<hr \/>\n<p><strong>IList<\/strong><br \/>\nBu aray\u00fcz, bir koleksiyondaki elemanlar\u0131n her birine s\u0131f\u0131r tabanl\u0131 bir indeks ile eri\u015febilmek i\u00e7in \u00e7e\u015fitli metodlar ve \u00f6zellikler i\u00e7erir.IList,ICollection aray\u00fcz\u00fcnden t\u00fcretilmi\u015ftir.<\/p>\n<hr \/>\n<p><strong>IHashProvider<\/strong><br \/>\nBu aray\u00fcz Object s\u0131n\u0131f\u0131ndaki GetHashCode() metodunu tan\u0131mlar.Bu metod ile HashTable s\u0131n\u0131f\u0131 ile \u00e7al\u0131\u015fabilmek i\u00e7in bir kod \u00fcretilir.Hash kodu denilen bu kodun ne anlama geldi\u011fini HashTable s\u0131n\u0131f\u0131nda anlayacaks\u0131n\u0131z.<br \/>\n\u015eimdi Non-Generic koleksiyon yap\u0131lar\u0131n\u0131 incelemeye ba\u015flayal\u0131m.<br \/>\nBir sonraki sayfada ArrayList koleksiyon yap\u0131s\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<p><!--nextpage--><br \/>\n<strong>ArrayList<\/strong><br \/>\nKoleksiyon s\u0131n\u0131flar\u0131n\u0131n en genel ama\u00e7l\u0131 olan\u0131d\u0131r.Dizilere olduk\u00e7a benzerler.Tek fark\u0131 dizilerde eleman say\u0131s\u0131 ba\u015fta belirtilirken,ArrayList&#8217;te eklenen elemana g\u00f6re eleman say\u0131s\u0131 artar.ArrayList ilk olu\u015fturuldu\u011funda kapasite 0,sonra eleman eklendi\u011finde kapasite 4 olur.Eleman say\u0131s\u0131 4 \u00fc ge\u00e7tikten sonra kapasite iki kat olarak artmaya ba\u015flayacakt\u0131r.0,4,8,16,32..<br \/>\nArrayList koleksiyonu ICollection, IEnumerable, IList ve ICloneable interfacelerini(aray\u00fcz) uygular.<br \/>\nArraylistin \u00fc\u00e7 tane yap\u0131c\u0131 metodu mevcuttur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nArrayList liste = new ArrayList();\r\n<\/pre>\n<p>Bu \u015fekilde olu\u015fturulan ArrayList koleksiyonunda,eleman eklendik\u00e7e kapasite otomatik olarak artacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nArrayList liste = new ArrayList(40);\r\n<\/pre>\n<p>Bu \u015fekilde olu\u015fturulan ArrayList koleksiyonunda,kapasite ba\u015flang\u0131\u00e7ta 40 t\u0131r.Eleman say\u0131s\u0131 40 \u0131 ge\u00e7erse otomatik olarak artt\u0131r\u0131lmaya ba\u015flar.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nArrayList liste = new ArrayList(ICollection c);\r\n<\/pre>\n<p>Bu \u015fekilde olu\u015fturulan ArrayList koleksiyonunda,ICollection aray\u00fcz\u00fcn\u00fc uygulam\u0131\u015f herhangi bir s\u0131n\u0131f\u0131n nesnesi parametre olarak verilir.<\/p>\n<p>ArrayList koleksiyonu, i\u00e7ine ald\u0131\u011f\u0131 elemanlar\u0131 object tipte kabul eder.Yani bir Boxing i\u015flemi g\u00f6r\u00fclmektedir.Bu elemanlar\u0131 kullan\u0131rken mecburen Unboxing i\u015flemi yapmam\u0131z gerekecektir.<br \/>\n<strong>Add Metodu<\/strong><br \/>\nBir ArrayList koleksiyonuna eleman eklemek i\u00e7in Add() metodu kullan\u0131l\u0131r.Bu metod object tipte parametre al\u0131r.Bu parametreye eleman\u0131z\u0131 veririz(Bu eleman herhangi bir s\u0131n\u0131f\u0131n nesneside olabilir.)Ve bu eleman\u0131 koleksiyonumuzun en sonuna ekler.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            liste.Add(1);\r\n            liste.Add(2);\r\n            liste.Add(3);\r\n<\/pre>\n<p><strong>Remove Metodu<\/strong><br \/>\nBir ArrayList koleksiyonundan eleman silmek i\u00e7in Remove() metodu kullan\u0131l\u0131r.Bu metod object tipte parametre al\u0131r.Bu parametreye verilen de\u011ferdeki eleman koleksiyondan \u00e7\u0131kart\u0131l\u0131r.E\u011fer verilen de\u011fer bulunamazsa hata olu\u015fmaz, program i\u015fleyi\u015fine devam eder.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            liste.Add(1);\r\n            liste.Add(2);\r\n            liste.Add(3);\r\n            liste.Remove(3);\r\n\/\/liste ArrayListine eklenen object tipli &quot;3&quot; verisi silinecektir.\r\n<\/pre>\n<p><em>Dikkat!!!:Remove() metodu, koleksiyondaki eleman\u0131 siliyor ama elemana ayr\u0131lan alan\u0131 silmiyor.O alana Null de\u011ferini koyuyor.<\/em><br \/>\n<strong>Capacity \u00d6zelli\u011fi<\/strong><br \/>\nCapacity \u00f6zelli\u011fi ile ArrayList&#8217;in i\u00e7ine konulacak MAX eleman say\u0131s\u0131n\u0131 g\u00f6rebiliriz.(Tabi o MAX eleman say\u0131s\u0131 ge\u00e7ildi\u011fi anda otomatik olarak artacakt\u0131r.)<br \/>\n<strong>TrimToSize Metodu<\/strong><br \/>\nArrayList in Capacity sindeki bo\u015f bulunan alanlar\u0131 bellekten atar.A\u015fa\u011f\u0131daki \u00f6rne\u011fi inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            liste.Add(1);\r\n            liste.Add(2);\r\n            liste.Add(3);\r\n            liste.Add(4);\r\n            liste.Add(5);\r\n            liste.Add(6);\r\n            liste.Add(7);\r\n            liste.Add(8);\r\n            liste.Add(9);\r\n            MessageBox.Show(&quot;Kapasite : &quot; + liste.Capacity);\r\n\/\/Kodlar\u0131 buraya kadar derleyip \u00e7al\u0131\u015ft\u0131r\u0131rsak kapasitenin 16 oldu\u011funu g\u00f6r\u00fcr\u00fcz.\r\n            liste.TrimToSize();\r\n            MessageBox.Show(&quot;Kapasite : &quot; + liste.Capacity);\r\n\/\/Son iki sat\u0131rdaki kodlarla beraber \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rsa e\u011fer kapasitenin 9 oldu\u011funu g\u00f6receksiniz.\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00f6rnekte, kapasitesi 16 olan ArrayList&#8217;e TrimToSize() metodu uygulan\u0131p bo\u015f alanlar siliniyor ve kapasitesi 9 a indiriliyor.Bu i\u015flem sonucunda bellekten tasarruf sa\u011flanm\u0131\u015f olunuyor.<br \/>\n<strong>Clear Metodu<\/strong><br \/>\nClear() metodu sayesinde ArrayList&#8217;teki elemanlar\u0131n hepsi silinecektir.Ancak Remove() metodunda oldu\u011fu gibi elemanlar\u0131n alanlar\u0131 silinmeyecektir.\u015eimdi a\u015fa\u011f\u0131daki \u00f6rne\u011fi inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            liste.Add(1);\r\n            liste.Add(2);\r\n            liste.Add(3);\r\n            liste.Add(4);\r\n            liste.Add(5);\r\n            liste.Add(6);\r\n            liste.Add(7);\r\n            liste.Add(8);\r\n            liste.Add(9);\r\n            liste.Clear();\r\n            MessageBox.Show(liste.Capacity.ToString());\r\n<\/pre>\n<p>Yukar\u0131daki liste ad\u0131ndaki ArrayList&#8217;imizin kapasitesi 16 d\u0131r.Clear() metodu uyguland\u0131\u011f\u0131 halde mesaj kutusunda kapasiteyi 16 olarak g\u00f6stermektedir.Demek ki, elemanlar\u0131n alanlar\u0131 silinmiyor.<br \/>\n<strong>Contains Metodu<\/strong><br \/>\nContains ile koleksiyon i\u00e7inde belirlenen eleman var m\u0131? yok mu? bak\u0131l\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            liste.Add(1);\r\n            liste.Add(2);\r\n            liste.Add(3);\r\n            MessageBox.Show(liste.Contains(3).ToString());\r\n<\/pre>\n<p>Yukar\u0131daki kodu derleyip \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z True de\u011ferini verecektir.<br \/>\n<strong>Insert Metodu<\/strong><br \/>\nBelirtilen indekse, belirtilen eleman eklenir.A\u015fa\u011f\u0131daki kodu inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            liste.Add(1);\r\n            liste.Add(2);\r\n            liste.Add(3);\r\n            liste.Add(4);\r\n            liste.Add(5);\r\n            MessageBox.Show(liste&#x5B;2].ToString());\r\n            liste.Insert(2, 33);\r\n            MessageBox.Show(liste&#x5B;2].ToString());\r\n<\/pre>\n<p>Yukar\u0131daki kodu incelerseniz,ilk ba\u015fta mesaj kutusunda 3 de\u011ferini yazacakt\u0131r.Insert() metoduyla, 2. indekse 33 de\u011ferini yazd\u0131r\u0131yorum.Son olarak mesaj kutusunda 33 de\u011ferini yazacakt\u0131r..2. indexten itibaren di\u011fer elemanlar bir sonraki indexe kayacakt\u0131rlar.<br \/>\n<strong>CopyTo Metodu<\/strong><br \/>\nBir ArrayList koleksiyonunu, bir diziye kopyalamam\u0131za yarar.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            liste.Add(1);\r\n            liste.Add(2);\r\n            liste.Add(3);\r\n            liste.Add(4);\r\n            liste.Add(5);\r\n            int&#x5B;] sayilar = new int&#x5B;liste.Count];\r\n            liste.CopyTo(sayilar);\r\n            for (int i = 0; i &lt; sayilar.Length; i++)\r\n            {\r\n                MessageBox.Show(sayilar&#x5B;i].ToString());\r\n            }\r\n<\/pre>\n<p>Yukar\u0131daki kodlar\u0131 incelerseniz,liste ArrayListini, sayilar dizisine kopyalayacakt\u0131r.<br \/>\n<strong>Sort Metodu<\/strong><br \/>\nBu metod koleksiyonumuzdaki elemanlar\u0131 s\u0131ralamam\u0131za yarayacakt\u0131r.Bu \u015fekilde kullan\u0131rsak int tiplerde k\u00fc\u00e7\u00fckten b\u00fcy\u00fc\u011fe do\u011fru,stringlerden alfabetik olarak s\u0131ralayacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ArrayList liste = new ArrayList();\r\n            liste.Add(123);\r\n            liste.Add(24);\r\n            liste.Add(453);\r\n            liste.Add(2);\r\n            liste.Add(34);\r\n            liste.Sort();\r\n            for (int i = 0; i &lt; liste.Count; i++)\r\n            {\r\n                MessageBox.Show(liste&#x5B;i].ToString());\r\n            }\r\n<\/pre>\n<p><!--nextpage--><strong>Hashtable<\/strong><br \/>\nDictionary tipinden bir koleksiyondur.Non-Generic tir.Key &#8211; Value \u00e7iftleri halinde bilgiler koleksiyonun elemanlar\u0131nda saklanabilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            Hashtable liste = new Hashtable();\r\n            liste.Add(&quot;Ad\u0131&quot;, &quot;Gen\u00e7ay&quot;);\r\n            liste.Add(&quot;Soyad\u0131&quot;,&quot;Y\u0131ld\u0131z&quot;);\r\n            liste.Add(&quot;Meslegi&quot;,&quot;Yaz\u0131l\u0131m Uzman\u0131&quot;);\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Key &#8211; Value ikilisi halinde bilgileri tutabiliyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            MessageBox.Show(liste&#x5B;&quot;Ad\u0131&quot;].ToString());\r\n\/\/&quot;Gen\u00e7ay&quot; yazacakt\u0131r.\r\n            MessageBox.Show(liste&#x5B;&quot;Soyad\u0131&quot;].ToString());\r\n\/\/&quot;Y\u0131ld\u0131z&quot; yazacakt\u0131r.\r\n            MessageBox.Show(liste&#x5B;&quot;Meslegi&quot;].ToString());\r\n\/\/&quot;Yaz\u0131l\u0131m Uzman\u0131&quot; yazacakt\u0131r.\r\n<\/pre>\n<p>Verilen Key de\u011feri kar\u015f\u0131l\u0131\u011f\u0131nda Value de\u011ferini object tipte geri g\u00f6nderir.<\/p>\n<p><strong>Hash<\/strong> : Bellek adresi demektir.<br \/>\nHastable koleksiyonu elemanlar\u0131 i\u00e7inde tutarken bellekte yerle\u015ftirdi\u011fi Hash Code a g\u00f6re tutar.B\u00f6ylece biz Hashtable&#8217;a ekledi\u011fimiz ilk eleman\u0131,ilk s\u0131rada tutaca\u011f\u0131n\u0131 varsayamay\u0131z.Elemanlar belle\u011fin bo\u015f k\u0131s\u0131mlar\u0131na yerle\u015fir, bellek adresleri yani Hashleri koleksiyon i\u00e7inde tutulur.Bundan dolay\u0131 koleksiyona ekledi\u011fimiz s\u0131rada elemanlar\u0131 elde etmemiz m\u00fcmk\u00fcn olmaz.Bundan dolay\u0131da Hashtable koleksiyonlar \u00fczerinde Sort(s\u0131ralama) i\u015flemi yap\u0131lmaz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            foreach (string item in liste.Keys)\r\n            {\r\n                MessageBox.Show(item);\r\n            }\r\n\/\/.Keys ile keylere,\r\n            foreach (string item in liste.Values)\r\n            {\r\n                MessageBox.Show(item);\r\n            }\r\n\/\/.Values ile valuelere ula\u015f\u0131labilir.\r\n<\/pre>\n<p><!--nextpage--><strong>SortedList<\/strong><br \/>\nAyn\u0131 Hashtable gibidir.Hastable elemanlar\u0131 hashlere g\u00f6re yerle\u015ftirirken, SortedList s\u0131ral\u0131 olarak yerle\u015ftirir.B\u00f6ylece SortedList i\u00e7indeki elemanlara s\u0131radan eri\u015fmek m\u00fcmk\u00fcn olur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            SortedList slist = new SortedList();\r\n            slist.Add(&quot;Ad\u0131&quot;, &quot;Gen\u00e7ay&quot;);\r\n            slist.Add(&quot;Soyadi&quot;, &quot;Y\u0131ld\u0131z&quot;);\r\n            slist.Add(&quot;Ya\u015f\u0131&quot;, 21);\r\n            slist.Add(&quot;Do\u011fum Y\u0131l\u0131&quot;, 1992);\r\n<\/pre>\n<p>Hashtable, SortedList&#8217;ten daha h\u0131zl\u0131 \u00e7al\u0131\u015f\u0131yor.<\/p>\n<p>\u015eimdilik bu kadar..<br \/>\nBir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131mda C#&#8217;ta koleksiyon yap\u0131lar\u0131ndan bahsedece\u011fim..NET Framework i\u00e7inde koleksiyon yap\u0131lar\u0131 System.Collections namespace i alt\u0131nda bulunan veri saklama s\u0131n\u0131flar\u0131d\u0131r.\u0130ki t\u00fcr koleksiyon yap\u0131s\u0131 vard\u0131r.Non-Generic ve Generic koleksiyonlar.Ben bu yaz\u0131mda Non-Generic koleksiyonlardan bahsedece\u011fim.Bu koleksiyon s\u0131n\u0131flar\u0131;ArrayList,SortedList ve HashTable&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[172,173],"class_list":["post-287","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","tag-non-generic","tag-system-collections"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=287"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/287\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}