Студопедия
Случайная страница | ТОМ-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-2021 год. (0.013 сек.)