Класс
|
вазифаси
|
Амалга оширилган энг муҳим интерфейслар
|
ArrayList
|
Ўлчамларини динамик ўзгартирадиган массив
|
IList, ICollection, IEnumerable, ICloneable
|
BitArray
|
Битли қийматларни сақлаш учун компакт массив
|
ICollection, IEnumerable, ICloneable
|
Hashtable
|
Хэш-жадвал
|
IDictionary, ICollection, IEnumerable, ICloneable
|
Queue
|
Навбат
|
ICollection, ICloneable, IEnumerable
|
SortedList
|
Калитлар бўйича тартибланган коллекция, унинг элементларига калит ёки индекслари бўйича мурожаат қилинади.
|
IDictionary, ICollection, IEnumerable, ICloneable
|
Stack
|
Стек
|
ICollection, IEnumerable
|
System.Collections.Specialized холатлар фазоси ўз ичига махсуслаштирилган коллекцияларни (масалан, StringCollection сатрлар коллекцияси, StringDictionary сатрли калитга эга хеш-жадвал) олади, .
Стандарт коллекцияга намуна сифатида ArrayList классини кўрамиз.
ArrayList класси.
Оддий массивларнинг асосий камчилиги шундаки, унинг элементларини сақлаш учун зарур бўлган хотира хажми массив билан ишлашгача бўлган даврда ажратилиши талаб қилиниши билан боғлиқ. ArrayList класси дастурчига массив учун хотирадан жой ажратиш ҳақида қайғурмаслик хамда турли типдаги элементларни битта массивда сақлаш имконини беради.
ArrayList типидаги объектларни яратишда тўғридан – тўғри object типидаги 16 та элементли массив яратилади. Унинг констуркторида кўрсатиш ёки Capacity ҳусусияти қийматини ўрнатиш орали массив элементлари сонини керагича бўлгилаш мумкин. Масалан,:
ArrayList arr1 = new ArrayList(); // 16 элементли массив яратилмоқда
ArrayList arr2 = new ArrayList(1000); // 1000 элементли массив яратилмоқда
ArrayList arr3 = new ArrayList();
arr3.Capacity = 1000; // элементлар миқдори кўрсатилмоқда
ArrayList класси Array класси ёрдамида амалга оширилган, яъни шу класснинг ёпиқ майдонини ўз ичига олган. C# да барча типлар object классининг авлодлари бўлгани учун, массивлар иҳтиёрий типдаги маълумотларни ўзида сақлаши мумкин. Ҳаттоки, агар массивда оддий бутун сонлар сақланса, у холда аҳамиятли типдаги элементлар мавжуд, ички класс object типидаги экземплярга ҳаволалар массиви бўлади хамда ихчамланган тип-қийматларни мужассамлатиради. Демак, массивга киритишда элементлар ихчамланади, чиқариб олинаётганда эса аслига қайтарилади.
Агар массивга янги элеменртларни қўшишда массив элементларининрг сони унинг хажмидан кўпайиб кетса, у ўзидан-ўзи икки марта катталашади, яъни хотирадан такроран жой ажратилади ва у ерга мавжуд барча элементлар кўчирилади. Массив элементларини ArrayList класси экземплярига кўчиришга намуна:
arr1.Add( 123 ); arr1.Add( -2 ); arr1.Add( "Вася" );
Элементларга мурожаат индекслар бўйича амалга оширилади, аммо бу холда олинган ҳаволани бутун сонга айлантириш керак бўлади. масалан:
int a = (int) arr1[0];
int b = (int) arr1[1];
string s = (string) arr1[2];
Сақланаётган элемент типига иом бўлмаган типга келтиришга уринилганда истисно қилинадиган InvalidCastException вазият юзага келади.
Дастурнинг ишончлилигини ошириш учун қуйидаги усулни қўллаш мумкин: ArrayList классининг экземпляри класснинг ёпиқ майдони деб эълон қилинади ва унда маълум бир типдаги қийматлар коллекцияси сақланиши керак, сўнгра шу коллекция билан ишлаш ArrayList методларига ўз функциялари узатувчи методлари эълон қилинади.
Бу усулнинг камчилиги шундаки, стандар коллекциянинг ҳар бир методи учун стандарт методни чақирувчи қобиқ-методни кўрсатишга тўғри келади. Бу амал қийин бўлмасада, унчалик чиройли ҳисобланмайди. C# дастурлаш тилида 2.0 версиялан бошлаб прототип-класслар (generics) лар жорий қилинди.
Do'stlaringiz bilan baham: |