Классы коллекций общего назначения
|
Класс |
Описание |
|
ArrayList |
Динамический массив, т.е. массив который при необходимости может увеличивать свой размер. |
|
Hashtable |
Хеш-таблица (словарь) для пар ключ/значение. |
|
Queue |
Очередь, или список, действующий по принципу: первым прибыл — первым обслужен. |
|
SortedList |
Отсортированный список пар ключ/значение. |
|
Stack |
Стек, или список, действующий по принципу: первым прибыл — последним обслужен. |
Класс ArrayList
Класс ArrayList предназначен для поддержки динамических массивов, которые при необходимости могут увеличиваться или сокращаться.
Класс ArrayList реализует интерфейсы:
• ICollection,
• IList,
• lEnumerable,
• ICloneable.
// Демонстрация использования ArrayList-массива.
using System;
using System.Collections;
class ArrayListDemp
{
public static void Main()
{
ArrayList al = new ArrayList(); // Создаем динамический массив.
// Добавляем элементы в динамический массив. al.Add('C');
al.Add('A');
al.Add('E');
// Отображаем массив, используя индексацию. for (int i = 0; i < al.Count; i++)
Console.Write(al[i] + " ");
al.Remove('A'); // Удаляем элемент
al[0] = 'Y'; // Изменяем элементы
al[1] = 'X';
al.Sort(); // Сортировка массива
foreach (char сh in al) Console.Write(сh + " ");
Console.WriteLine("Индекс элемента 'Y' равен " + al.BinarySearch('Y')); // поиск элемента
// Создаем обычный массив из динамического. char[] ia = (char[])al.ToArray (typeof(char));
}
}
Класс Queue
Добавление элементов в очередь и удаление их из нее осуществляет- ся по принципу "первым пришел — первым обслужен" (first-in, first-out— FIFO).
Очередь — это динамическая коллекция, которая при необходимости увеличивается, чтобы принять для хранения новые элементы.
Класс Queue реализует интерфейсы:
• ICollection (здесь определено свойство int Count {get;} ),
• lEnumerable,
• ICloneable.
Методы, определенные в классе Queue
|
Метод |
Описание |
||
|
public virtual bool Contains(object v) |
Возвращает значение true, если объект v содержится в вызывающей очереди. В противном случае возвра- щает значение false |
||
|
Public virtual void Clear() |
Устанавливает свойство Count рав- ным нулю, тем самым эффективно очищая очередь |
||
|
public |
virtual object Dequeue() |
Возвращает объект из начала вы- зывающей очереди, Возвращаемый объект из очереди удаляется |
|
|
public virtual void Enqueue(object v) |
ди |
Добавляет объект v в конец очере- |
|
|
public |
virtual object Peek ( ) |
Возвращает объект из начала вы- зывающей очереди, но не удаляет его |
|
|
public static Queue Synchronized(Queue q) |
Возвращает синхронизированную версию очереди, заданной параметром q |
||
|
public |
virtual object[ ] ToArray ( ) |
Возвращает массив, который со- держит копии элементов из вызываю- щей очереди |
|
|
public |
virtual void TrimToSlze( ) |
Устанавливает свойство capacity равным значению свойства Count |
|
// Демонстрация класса Queue.
using System;
using System.Collections;
class QueueDemo
{
public static void Main()
{
int a;
Queue q = new Queue();
q.Enqueue(22); q.Enqueue(65); q.Enqueue(91);
foreach (int i in q) Console.Write(i + " ");
Console.WriteLine();
try
{
a = (int)q.Dequeue(); Console.WriteLine(a); a = (int)q.Dequeue(); Console.WriteLine(a); a = (int)q.Dequeue(); Console.WriteLine(a); a = (int)q.Dequeue(); Console.WriteLine(a);
}
catch (InvalidOperationException)
{
Console.WriteLine("Очередь пуста.");
}
}
}
Класс Hashtable
Класс Hashtable предназначен для создания коллекции, в которой для хранения объектов используется хеш-таблица. В хеш-таблице для хранения информации используется механизм, именуемый хешировани- ем (hashing), Суть хеширования состоит в том, что для определения уни- кального значения, которое, называется хеш-кодом, используется ин- формационное содержимое соответствующего ему ключа. Хеш-код затем используется в качестве индекса, по которому в таблице отыскиваются данные, соответствующие этому ключу.
Преимущество хеширования — в том, что оно позволяет сохранять постоянным время выполнения таких операций, как поиск, считывание и запись данных, даже для больших объемов информации.
Hashtable-коллекция не гарантирует сохранения порядка элементов.
Класс Hashtable реализует интерфейсы:
• IDictionary,
• ICollection,
• lEnumerable,
• ISerializable,
• IDeserializationCallback,
• ICloneable.
В классе Hashtable определено множество конструкторов, но чаще всего используется следующий:
public Hashtable();
Наиболее употребимые методы класса Hashtable
|
Метод |
Описание |
|
public virtual bool ContainsKey(object k) |
Возвращает значение true, если в вызывающей Hashtable-коллекции со- держится ключ, заданный параметром k. В противном случае возвращает зна- чение false. |
|
public virtual bool ContainsValue(object v) |
Возвращает значение true, если в вызывающей Hashtable-коллекции со- держится значение, заданное парамет- ром v. В противном случае возвращает значение false |
|
public virtual IDictionaryEnumerator
GetEnumerator() |
Возвращает для вызывающей Hashtable-коллекции нумератор типа IDictionaryEnumerator |
|
public static Hashtable Synchronized( Hashtable ht) |
Возвращает синхронизированную версию вызывающей Hashtabie- коллекции, переданной в параметре ht. |
В классе Hashtable, помимо свойств, определенных в реализованных им интерфейсах, также определены два собственных public-свойства. Используя следующие свойства, можно из Hashtable-коллекции получить коллекцию ключей или значений:
public virtual ICollection Keys { get ; } public virtual ICollection Values { get ; }
В классе определен так же и индексатор
this[ключ] {get; set;}
В классе Hashtable пары ключ/значение хранятся в форме структуры типа DictionaryEntry, но по большей части вас это не будет касаться, по- скольку свойства и методы обрабатывают ключи и значения отдельно.
// Демонстрация использования Hashtable-коллекции.
using System;
using System.Collections; class HashtableDemo
{
public static void Main()
{
Hashtable ht = new Hashtable(); // Создаем хеш-таблицу.
// Добавляем элементы в хеш-таблицу. ht.Add("здание", "жилое помещение");
ht.Add("книга", "набор печатных слов");
ht.Add("яблоко", "съедобный фрукт"); ht.Add("автомобиль", "транспортное средство");
//Добавляем элементы с помощью индексатора. ht ["трактор"] = "сельскохозяйственная машина";
// Извлекаем элемент по ключу.
string value = (string)ht ["автомобиль"]; Console.WriteLine ("---автомобиль: " + value);
// Получаем коллекцию ключей.
// Используем ключи для получения значений. Console.WriteLine("\n---Первый способ---"); ICollection с = ht.Keys;
foreach(string str in с) Console.WriteLine(str + ": " + ht[str]);
ht.Remove("трактор"); // Удалить элемент
Console.WriteLine("\n---Второй способ---");
// Используем структуру DictionaryEntry для получения ключей и значений. foreach (DictionaryEntry de in ht)
{
Console.WriteLine(de.Key + ": " + de.Value);
}
}
}
Результаты выполнения этой программы таковы
(порядок - другой):
---автомобиль: транспортное средство
---Первый способ--- здание: жилое помещение
автомобиль: транспортное средство яблоко: съедобный фрукт
книга: набор печатных слов
трактор: сельскохозяйственная машина
---Второй способ--- здание: жилое помещение
автомобиль: транспортное средство яблоко: съедобный фрукт
книга: набор печатных слов
Класс SortedList
Класс SortedList предназначен для создания коллекции, которая хра- нит пары ключ/значение в упорядоченном виде, а именно отсортированы по ключу.
Класс SortedList реализует интерфейсы:
• ICollection,
• IEnumerable,
• ICloneable.
Конструктор:
public SortedList( )
Наиболее употребимые методы класса SortedList
|
Метод |
Описание |
|
public virtual bool ContainsKey (object key) |
Возвращает значение true, если в вызывающей SortedList-коллекции со- держится ключ, заданный параметром key. В противном случае возвратит значение false |
|
public virtual bool ContainsValue( object value) |
Возвращает значение true, если в вызывающей SortedList-коллекции со- держится значение, заданное пара- метром value. Иначе – false. |
|
public virtual object GetBylndex(int idx) |
Возвращает значение, индекс ко- торого задан параметром idx |
|
public virtual IDictionaryEnumerator GetEnumerator () |
Возвращает нумератор типа IDic- tionaryEnumerator для вызывающей SortedList-коллекции |
|
public virtual object GetKey (int idx) |
Возвращает ключ, индекс которого задан параметром idx |
|
public virtual IList GetKeyList() |
Возвращает IList- коллекцию клю- чей, хранимых в вызывающей SortedList-коллекции |
|
public virtual IList GetValueList() |
Возвращает IList-коллекцию зна- чений, хранимых в вызывающей SortedList-коллекции |
|
public virtual int IndexOfKey (object key) |
Возвращает индекс ключа, задан- ного параметром key. Возвращает значение -1, если в списке нет задан- ного ключа |
|
public virtual int IndexOfValue ( object value) |
Возвращает индекс первого вхож- дения значения, заданного парамет- ром value. Возвращает -1, если в спи- ске нет заданного ключа |
|
public virtual void SetBylndex(int idx, object value) |
Устанавливает значение по индек- су, заданному параметром idx, равным значению, переданному в параметре value |
|
public static SortedList Synchronized( SortedList sl) |
Возвращает синхронизированную версию SortedList-коллекции, пере- данной в параметре sl |
|
public virtual void TrimToSize() |
Устанавливает свойство capacity равным значению свойства Count |
В классе определены индексатор
this[ключ] {get; set;}
Объекты коллекции нумеруются, начиная с 0.
Получить предназначенную только для чтения коллекцию ключей или значений, хранимых в SortedList-коллекции, можно с помощью таких свойств:
public virtual ICollection Keys { get; } public virtual ICollection Values { get; }
Порядок следования ключей и значений в полученных коллекциях отражает порядок SortedList-коллекции.
Подобно Hashtable-коллекции, SortedList-список хранит пары ключ/значение в форме структуры типа DictionaryEntry, но с помощью методов и свойств, определенных в классе SortedList, программисты обычно получают отдельный доступ к ключам и значениям.
// Демонстрация SortedList-коллекции.
using System ;
using System.Collections ;
class SLDemo
{
public static void Main()
{
// Создаем упорядоченную коллекцию типа SortedList. SortedList sl = new SortedList();
// Добавляем в список элементы.
sl.Add ("здание", "жилое помещение");
sl.Add ("книга", "набор печатных слов"); sl.Add ("яблоко", "съедобный фрукт");
sl.Add ("автомобиль", "транспортное средство");
// Добавляем элементы с помощью индексатора. sl ["трактор"] = "сельскохозяйственная машина";
// Извлекаем элемент по ключу.
string value = (string) sl ["автомобиль"]; Console.WriteLine ("---по ключу: " + value); Console.WriteLine ("---по индексу: " + sl.GetByIndex(3));
// Получаем коллекцию ключей. ICollection с = sl.Keys;
// Используем ключи для получения значений. Console.WriteLine("\n--Содержимое списка, полученное "
+ "с помощью индексатора.");
foreach (string str in с) Console.WriteLine(str + ": " + sl[str]);
sl.Remove("трактор"); // Удалить элемент
// Отображаем список, используя целочисленные индексы. Console.WriteLine("\n--Содержимое списка, полученное "
+ "с помощью целочисленных индексов."); for (int i = 0; i < sl.Count; i++)
Console.WriteLine(sl.GetByIndex(i));
// Отображаем целочисленные индексы элементов списка. Console.WriteLine("\n --Целочисленные индексы" +
" элементов списка."); foreach (string str in с)
Console.WriteLine(str + ": " + sl.IndexOfKey(str));
}
}
Результаты выполнения этой программы таковы (отсортировано):
---по ключу: транспортное средство
---по индексу: сельскохозяйственная машина
--Содержимое списка, полученное с помощью индексатора. автомобиль: транспортное средство
здание: жилое помещение книга: набор печатных слов
трактор: сельскохозяйственная машина яблоко: съедобный фрукт
--Содержимое списка, полученное с помощью целочисленных индек- сов.
транспортное средство жилое помещение набор печатных слов съедобный фрукт
--Целочисленные индексы элементов списка. автомобиль: 0
здание: 1
книга: 2
яблоко: 3
Класс Stack
Стек представляет собой список, добавление и удаление элементов к которому осуществляется по принципу "последним пришел — первым об- служен" (last-in, first-out — LIFO).
Стек — это динамическая коллекция, которая при необходимости увеличивается, чтобы принять для хранения новые элементы.
Стек реализует интерфейсы:
• ICollection,
• IEnumerable,
• ICloneable.
Методы, определенные в классе Stack
|
Метод |
Описание |
|
public virtual bool Contains(object value) |
Возвращает значение true, если объект value содержится в вызываю- щем стеке. В противном случае воз- вращает значение false |
|
public virtual void Clear() |
Устанавливает свойство Count рав- ным нулю, тем самым эффективно очищая стек |
|
public virtual object Peek() |
Возвращает элемент, располо- женный в вершине стека, но не удаля- ет его |
|
public virtual object Pop() |
Возвращает элемент, располо- женный в вершине стека, и удаляет его |
|
public virtual void Push(object value) |
Помещает объект value в стек |
|
public static Stack Synchronized(Stack stk) |
Возвращает синхронизированную версию stack-списка, переданного в параметре stk |
|
public virtual object[ ]
ToArray() |
Возвращает массив, который со- держит копии элементов вызывающего стека |
// Демонстрация использования класса Stack.
using System;
using System. Collections;
class StackDemo
{
public static void Main()
{
int a;
Stack st = new Stack();
st.Push(22);
st.Push(65);
st.Push(91);
foreach (int i in st) Console.Write(i + " "); Console.WriteLine();
try
{
a = (int)st.Pop(); Console.WriteLine(a); a = (int)st.Pop(); Console.WriteLine(a); a = (int)st.Pop(); Console.WriteLine(a); a = (int)st.Pop(); Console.WriteLine(a);
}
catch (InvalidOperationException)
{
Console.WriteLine("Стек пуст.");
}
}
}
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.