Классы коллекций общего назначения
Оценка 5

Классы коллекций общего назначения

Оценка 5
docx
18.11.2021
Классы коллекций общего назначения
Л2-002174.docx

Классы коллекций общего назначения

 

Класс

Описание

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("Стек пуст.");

}

}

}

 


 

Классы коллекций общего назначения

Классы коллекций общего назначения

Sort(); //

Sort(); //

Демонстрация класса Queue. using

Демонстрация класса Queue. using

IDeserializationCallback, •

IDeserializationCallback, •

Main() { Hashtable ht = new

Main() { Hashtable ht = new

Класс SortedList Класс SortedList предназначен для создания коллекции, которая хра- нит пары ключ/значение в упорядоченном виде, а именно отсортированы по ключу

Класс SortedList Класс SortedList предназначен для создания коллекции, которая хра- нит пары ключ/значение в упорядоченном виде, а именно отсортированы по ключу

SortedList Synchronized( SortedList sl)

SortedList Synchronized( SortedList sl)

Получаем коллекцию ключей. ICollection с = sl

Получаем коллекцию ключей. ICollection с = sl

Класс Stack Стек представляет собой список, добавление и удаление элементов к которому осуществляется по принципу "последним пришел — первым об- служен" (last-in, first-out —

Класс Stack Стек представляет собой список, добавление и удаление элементов к которому осуществляется по принципу "последним пришел — первым об- служен" (last-in, first-out —

Push(91); foreach (int i in st)

Push(91); foreach (int i in st)
Скачать файл