Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Обзор обобщенных коллекций

Читайте также:
  1. VII. Обзор исторический
  2. А. Общий обзор
  3. А. Общий обзор
  4. А. Общий обзор
  5. А. Общий обзор
  6. Аугсбургское исповедание веры: авторство, история текста, обзор содержания.
  7. Безадресный обзор

Прежде чем рассмотреть внимательно использование классов коллекций, мы приведем обзор доступных обобщенных классов и интерфейсов коллекций.

Основные интерфейсы и их функциональность представлены в табл. 7.1.


Таблица 7.1. Основные интерфейсы и функциональность обобщенных коллекций

Интерфейс Методы и свойства Описание
ICollection<T> Add() Clear() Contains() CopyTo() Remove() Count IsReadOnly Интерфейс ICollection<T> реализован классами коллекций. Методы этого интерфейса могут быть использованы для добавления и удаления элементов коллекции. Обобщенный интерфейс ICollection<T> наследуется от необобщенного интерфейса IEnumerable. Поэтому можно передавать объекты, реализующие ICollection<T>, методам, которые требуют параметры IEnumerable.
IList<T> Insert() RemoveAt() IndexOf () Item Интерфейс List<T> позволяет организовать доступ к элементам коллекции с помощью ин­дексатора. Он также позволяет вставлять и удалять элементы в любой позиции. Подобно ICollection, IList<T> наследуется от IEnumerable.
IEnumerable<T> GetEnumerator() Интерфейс IEnumerable<T> требуется для использования оператора foreach с коллекцией. Этот интерфейс определяет метод GetEnumerator(), который возвращает пе­речислитель, реализующий IEnumerator<T>. Обобщенный интерфейс IEnumerable <T> наследуется от необобщенного IEnumerable.
IEnumerator<T> Current Оператор fоreach использует перечислитель, реализующий IEnumerator<T> Для доступа ко всем элементам коллекции. Интерфейс IEnumerable<T> наследуется от необобщенных интерфейсов IEnumerator и IDisposable. Интерфейс IEnumerator определяет методы MoveNext() и Reset(). IEnumerable<T> определяет безопасную к типам версию свойства current.
IDictionary<TKey, TValue> Add () ContainsKey() Remove() TryGetValue () Item, Keys, Values Интерфейс IDictionary<K,V> реализуется коллекциями, элементы которых имеют ключ и значение.
IComparer<T> Compare () Интерфейс IComparer<T> применяется для сортировки элементов внутри коллекции ме­тодом Compare().
IEqualityComparer<T> Equals () GetHashCode () IEqualityComparer<T> — второй интерфейс для сравнения объектов. С этим интерфейсом объекты могут быть проверены на равенство. Метод GetHashCode() должен возвращать уникальное значение для каждого объекта. Метод Equals() возвращает true, если объекты равны, и false — в противном случае.

Обобщенные классы коллекций и их функциональность представлены в табл. 7.2.

Таблица 7.2. Обобщенные классы коллекций и их функциональность

Класс Реализованные интерфейсы Описание
List<T> IList<T> ICollection<T> IEnumerable<T> Класс List<T> — обобщенная замена класса ArrayList. Подобно ArrayList, List<T> может расти и уменьшаться ди­намически. Помимо реализации трех указанных интерфейсов, он также поддерживает дополнительную функциональность, такую как сортировку и смена порядка следования элементов на обратный.
Dictionary <ТКеу, TValue> IDictionary<TKey, TValue> ICollection<KeyValue Pair <TKey, TValue>> IEnumerable<KeyValuePair <TKey, TValue>> ISerializable IDeserializationCallback Dictionary<TKey, TValue> — класс коллекций, которые хранят пары ключ-значение.
SortedList<ТКеу, TValue> IDictionary<TKey, TValue>, ICollection<Ke у Value Pair <TKey, TValue>> IEnumerable<KeyValuePair <TKey, TValue» SortedList<TKey, TValue> подобен Dictionary<TKey, TValue> с тем отличием, что эта коллекция сортируется по ключу.
LinkedList<T> ICollection<T> IEnumerableISerializable IDeserializationCallback LinkedList<T> — двунаправленный связный список. Каждый элемент имеет ссылки на предыдущий и следующий элементы.
Queue<T> ICollection<T> IEnumerable<T> Queue<T> — коллекция, поддерживающая алгоритм «первым пришел — первым обслужен». Элемент, добавленный первым, первым и будет прочитан. Метод Enque() добавляет объект в конец очереди; метод Deque() возвращает и удаляет объект из начала очереди. Методом Peek() можно прочитать первый объект очереди, не удаляя его.
Stack<T> ICollection<T> IEnumerable<T> Stack<T> — коллекция, реализующая алгоритм «последним пришел — первым обслужен». Элемент, добавленный по­следним, будет прочитан из стека первым. Stack<T> предлагает методы Push() и Pop(). Push() добавляет элемент в конец стека, a Pop() читает и удаляет объект из конца стека. Метод Peek() позволяет прочитать последний элемент стека, не удаляя его.

 

Среда. NET Framework представляет некоторые базовые классы обобщенных коллций, которые могут быть использованы для создания пользовательских обобщенных классов. Классы, представленные в табл. 7.3, находятся в пространстве имен System.Collections.ObjectModel.

Таблица 7.3. Классы из пространства имен System.Collections.ObjectModel

Класс Реализованные интерфейсы Описание
Collection<T> IList<T> ICollection<T> IEnumerable<T> Класс Collection<T> может быть ис­пользован в качестве базового для пользовательских обобщенных классов коллекций. Реализует интерфейсы IList<T>, IColleetion<T> и IEnumerable<T>. Внутри этот класс использует класс List<T>, однако не предоставляет доступ ко всем методам List<T>. Поэтому в пользовательских обобщенных классах коллекций вы можете представить методы, необходимые для конкретного применения. В пользовательских классах можно получить доступ к лежащему в основе объекту List<T> через защищенное свойство Items.
ReadOnlyCollection<T> IList<T> ICollection<T> IEnumerable<T> ReadOnlyCollection<T> — версия класса Collection<T> с доступом только для чтения. Все методы интерфейсов, которые позволяют добавление и уда­ление элементов, реализованы явно и генерируют исключение NotSupportedException. Объект этого класса может быть создан передачей конструктору любой коллекции, реали­зующей IList<T>.
KeyedCol lection<TKey, TItem> IList<TItem> ICollection<TItem> IEnumerable<TItem> KeyedCollectior<TKey, TItem> — абстрактный базовый класс, который можно использовать для создания пользовательских классов коллекций, имеющих ключ и значения. Класс наследуется от Collection<TItem>

 

Использование класса List<T>

Класс List<T> из пространства имен System.Collections.Generic очень похож в применении на ArrayList из пространства имен System.Collections. Этот класс реализует интерфейсы IList, ICollection и IEnumerable.

В следующем примере используется класс Student в качестве типа элементов, добавляемых к коллекции, хранящей информацию о студентах факультета Информатизации и управления РГЭУ. Этот класс имеет два поля — полное имя студента и номер групы, доступ к которым организован через свойства. Значения полей передаются экземпляру класса в параметрах конструктора. Метод ToString() переопределен так, чтобы возвращать имя студента и номер групы:

 

class Student

{

private string fullName;

private string group;

public string FullName {

get { return fullName; }

set { fullName = value; } }

public string Group {

get { return group; }

set { group = value; } }

public Student(string fullName, string group)

{

this.fullName = fullName;

this.group = group;

}

public override string ToString()

{

return fullName + " группа " + group;

}

 

Переменная students определена как имеющая тип List<Student>. Операцией new создается объект того же типа. Здесь используется конструктор класса List<T> поумолчанию. Но у него также есть конструктор, резервирующий память для определеного числа элементов, а также конструктор, копирующий элементы из другой коллекции типа List<T>.

Поскольку экземпляр класса List<T> создается с конкретным классом Student в качестве параметра, только объекты типа Student могут быть добавлены в коллекцию методом Add(). В классе List<T> метод Add() определен как Add(Tltem). В следующем примере создаются и добавляются в коллекцию шесть студентов. Затем с помощью оператора foreach выполняется итерация по коллекции и каждый

 

class Program

{

static void Main(string[] args)

{

List<Student> students = new List<Student>();

students.Add(new Student ("Акинина Ольга","331"));

students.Add(new Student ("Викулов Михаил","331"));

students.Add(new Student ("Анисимова Наталья", "321"));

students.Add(new Student ("Квасов Виктор", "321"));

students.Add(new Student ("Илларионов Евнений", "334"));

students.Add(new Student("Кузнецова Татьяна", "334"));

foreach (Student st in students)

Console.WriteLine(st);

string s = Console.ReadLine();

}

}

 

На рис.7.1 приведен результат работы программы.

 

Рис. 7.1. Вывод данных коллекции

Используя класс List<T>, можно не только добавлять элементы и обращаться к ним через перечислитель; этот класс также имеет методы для вставки и удаления элементов, очистки коллекции и копирования элементов в массив. Ниже описана еще более мощная функциональность. List<T> представляет методы для поиска и преобразования элементов, для изменения их порядка на противоположный и тому подобных действий.


Дата добавления: 2015-07-07; просмотров: 180 | Нарушение авторских прав


Читайте в этой же книге: Сортировка | Преобразования типов | Создание пользовательских обобщенных классов | Обобщенные методы | Обобщенные делегаты |
<== предыдущая страница | следующая страница ==>
Повторное использование двоичного кода| Поиск элементов

mybiblioteka.su - 2015-2024 год. (0.011 сек.)