You are on page 1of 6

Колекции.

Клас ArrayList и класHashtable


Колекциите предоставят по-гъвкав начин за работа с групи от обекти. За разлика от масивите,
групата от обекти, с които работите, може да расте и да се свива динамично с промяната на
нуждите на приложението. За някои колекции можете да присвоите ключ на всеки обект,
който поставите в колекцията, така че да можете бързо да извлечете обекта с помощта на
ключа. Колекцията е клас, така че трябва да декларирате екземпляр на класа, преди да можете
да добавите елементи към тази колекция. Ако вашата колекция съдържа елементи само от
един тип данни, можете да използвате един от класовете в пространството от имена
System.Collections.Generic. Generic колекция налага безопасността на типа, така че към нея не
може да се добави друг тип данни. Когато извличате елемент от generic колекция, не е нужно
да определяте неговия тип данни или да го преобразувате.

Следващият пример създава списък с низове и след това преглежда низовете с помощта на
оператор foreach.
// Create a list of strings.
var salmons = new List<string>();
salmons.Add("chinook");
salmons.Add("coho");
salmons.Add("pink");
salmons.Add("sockeye");

// Iterate through the list.


foreach (var salmon in salmons)
{
Console.Write(salmon + " ");
}
// Output: chinook coho pink sockeye

Следващият пример е същият като предишния, с изключение на това, че се използва


инициализатор на колекция за добавяне на елементи към колекцията.
// Create a list of strings by using a
// collection initializer.
var salmons = new List<string> { "chinook", "coho", "pink", "sockeye" };

// Iterate through the list.


foreach (var salmon in salmons)
{
Console.Write(salmon + " ");
}
// Output: chinook coho pink sockeye

Можете да създадете обща колекция, като използвате един от класовете в пространството от


имена System.Collections.Generic. Generic колекция е полезна, когато всеки елемент в
колекцията има един и същ тип данни. Generic колекция налага строго въвеждане, като
позволява добавяне само на желания тип данни.
Следната таблица изброява някои от често използваните класове на System.Collections.Generic
namespace:

ArrayList Class

Реализира интерфейса IList, използвайки масив, чийто размер се увеличава динамично според
изискванията.
public class ArrayList : ICloneable, System.Collections.Ilist

Следващият пример показва как да създадете и инициализирате ArrayList и как да покажете


неговите стойности.
using System;
using System.Collections;
public class SamplesArrayList {

public static void Main() {

// Creates and initializes a new ArrayList.


ArrayList myAL = new ArrayList();
myAL.Add("Hello");
myAL.Add("World");
myAL.Add("!");

// Displays the properties and values of the ArrayList.


Console.WriteLine( "myAL" );
Console.WriteLine( " Count: {0}", myAL.Count );
Console.WriteLine( " Capacity: {0}", myAL.Capacity );
Console.Write( " Values:" );
PrintValues( myAL );
}

public static void PrintValues( IEnumerable myList ) {


foreach ( Object obj in myList )
Console.Write( " {0}", obj );
Console.WriteLine();
}
}

/*
This code produces output similar to the following:

myAL
Count: 3
Capacity: 4
Values: Hello World !

*/

ArrayList не е гарантирано, че ще бъде сортиран. Трябва да сортирате ArrayList, като извикате


неговия метод Sort, преди да извършите операции (като BinarySearch), които изискват
сортиране на ArrayList. За да поддържате колекция, която се сортира автоматично при
добавяне на нови елементи, можете да използвате класа SortedSet<T>.

Капацитетът на ArrayList е броят на елементите, които ArrayList може да съдържа. Тъй като
елементите се добавят към ArrayList, капацитетът автоматично се увеличава според
изискванията чрез преразпределение. Капацитетът може да бъде намален чрез извикване на
TrimToSize или чрез изрично задаване на свойството Capacity.

Конструктури:

ArrayList()

Инициализира нов екземпляр на класа ArrayList, който е празен и има първоначален капацитет
по подразбиране.

ArrayList(ICollection)

Инициализира нов екземпляр на класа ArrayList, който съдържа елементи, копирани от


посочената колекция и който има същия начален капацитет като броя на копираните
елементи.

ArrayList(Int32)

Инициализира нов екземпляр на класа ArrayList, който е празен и има посочения


първоначален капацитет.

МЕТОДИ

Adapter(IList)

Създава обвивка ArrayList за конкретен IList.

Аdd (Object)

Добавя обект в края на ArrayList.


AddRange (ICollection)

Добавя елементите на ICollection в края на ArrayList.

За пълният лист с методи -


https://docs.microsoft.com/en-us/dotnet/api/system.collections.arraylist?view=net-6.0

Hashtable Class

Представлява колекция от двойки ключ/стойност, които са организирани въз основа на хеш


кода на ключа.
public class Hashtable : ICloneable, System.Collections.IDictionary,
System.Runtime.Serialization.IDeserializationCallback,
System.Runtime.Serialization.Iserializable

Следващият пример демонстрира създаване на Hashtable и добавяне на елементи.

Hashtable numberNames = new Hashtable();


numberNames.Add(1,"One"); //adding a key/value using the Add()
method
numberNames.Add(2,"Two");
numberNames.Add(3,"Three");

//The following throws run-time exception: key already added.


//numberNames.Add(3, "Three");

foreach(DictionaryEntry de in numberNames)
Console.WriteLine("Key: {0}, Value: {1}", de.Key, de.Value);

//creating a Hashtable using collection-initializer syntax


var cities = new Hashtable(){
{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};

foreach(DictionaryEntry de in cities)
Console.WriteLine("Key: {0}, Value: {1}", de.Key, de.Value);

Можете да извлечете стойността на съществуващ ключ от Hashtable, като подадете ключ в


индексатора. Hashtable е негенерична колекция, така че трябва да въведете стойности за
прехвърляне, докато я извличате.
//creating a Hashtable using collection-initializer syntax
var cities = new Hashtable(){
{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};

string citiesOfUK = (string) cities["UK"]; //cast to string


string citiesOfUSA = (string) cities["USA"]; //cast to string

Console.WriteLine(citiesOfUK);
Console.WriteLine(citiesOfUSA);

cities["UK"] = "Liverpool, Bristol"; // update value of UK key


cities["USA"] = "Los Angeles, Boston"; // update value of USA key

if(!cities.ContainsKey("France")){
cities["France"] = "Paris";
}

Методът Remove() премахва ключ-стойност, който съвпада с посоченото в Hashtable. Той


хвърля KeyNotfoundException, ако посоченият ключ не е намерен в Hashtable, така че
проверете за съществуващ ключ с помощта на метода ContainsKey(), преди да премахнете.

Използвайте метода Clear(), за да премахнете всички елементи на един


път.

var cities = new Hashtable(){


{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};

cities.Remove("UK"); // removes UK
//cities.Remove("France"); //throws run-time exception:
KeyNotFoundException

if(cities.ContainsKey("France")){ // check key before removing it


cities.Remove("France");
}

cities.Clear(); //removes all elements


Следващата диаграма илюстрира йерархията на класовете Hashtable.

Източници: https://www.tutorialsteacher.com/csharp/csharp-hashtable
https://docs.microsoft.com/en-us/dotnet/api/system.collections.hashtable?view=net-
6.0
https://docs.microsoft.com/en-us/dotnet/api/system.collections.arraylist?view=net-6.0
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/
collections

You might also like