Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Абстракции данных и их реализация классами коллекций языка C#

Покупка
Основная коллекция
Артикул: 778136.01.99
Учебное пособие предназначено для студентов, обучающихся по направлению 38.03.05 «Бизнес-информатика», дневной, заочной и дистанционной форм обучения дисциплинам «Объектно-ориентированный анализ и программирование». Материал учебного пособия охватывает часть материала, изучаемого по этой дисциплине. Излагаются вопросы спецификации и реализации абстрактных типов данных средствами классов коллекций языка C#, а также приведены указания к выполнению и варианты РГЗ. Примеры упражнений выполнены в среде Visual Studio.
Зайцев, М. Г. Абстракции данных и их реализация классами коллекций языка C# : учебное пособие / М. Г. Зайцев. - Новосибирск : Изд-во НГТУ, 2019. - 86 с. - ISBN 978-5-7782-4060-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/1866888 (дата обращения: 20.06.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Министерство науки и высшего образования Российской Федерации 

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ 

 
 
 
 
М.Г. ЗАЙЦЕВ 
 
 
 
АБСТРАКЦИИ ДАННЫХ  
И ИХ РЕАЛИЗАЦИЯ 
КЛАССАМИ КОЛЛЕКЦИЙ 
ЯЗЫКА C# 
 
 
Утверждено  
Редакционно-издательским советом университета  
в качестве учебного пособия 
 
 
 
 
 
 
 
 
 
 
 
НОВОСИБИРСК 
2019 

УДК 004.415.22(075.8) 
   З-177 
 
 
 
Рецензенты: 
канд. техн. наук, доцент В.Г. Кобылянский, 
ст. преподаватель кафедры ТС и ВС СибГУТИ Л.Ф. Лебеденко 
 
 
 
 
Зайцев М.Г. 
З-177  
Абстракции данных и их реализация классами коллекций 
языка C#: учебное пособие / М.Г. Зайцев. – Новосибирск: Изд-во 
НГТУ, 2019. – 86 с. 

 
 
ISBN 978-5-7782-4060-5 

Учебное пособие предназначено для студентов, обучающихся по 
направлению 38.03.05 «Бизнес-информатика», дневной, заочной и дистанционной форм обучения дисциплинам «Объектно-ориентированный анализ и программирование». Материал учебного пособия охватывает часть материала, изучаемого по этой дисциплине. Излагаются 
вопросы спецификации и реализации абстрактных типов данных средствами классов коллекций языка C#, а также приведены указания к выполнению и варианты РГЗ. Примеры упражнений выполнены в среде 
Visual Studio. 
 
 
Работа подготовлена кафедрой теоретической  
и прикладной информатики 
 
 
УДК 004.415.22(075.8) 
 
 
ISBN 978-5-7782-4060-5 
© Зайцев М.Г., 2019 
 
© Новосибирский государственный  
 
    технический университет, 2019 

КОЛЛЕКЦИИ 

Введение в коллекции 

В языке C# есть массивы, которые хранят в себе наборы однотипных объектов, но работать с ними не всегда удобно. Массив хранит 
фиксированное количество объектов. В том случае, когда мы заранее 
не знаем, сколько нам потребуется объектов, намного удобнее применять коллекции. Коллекция – это класс или шаблон класса, экземпляры 
которого обеспечивают: хранение набора объектов, заданного типа и 
выполнение над ними операций, определенных в коллекции. Коллекции, включенные в библиотеки C#, реализуют стандартные структуры 
данных, например, стек, очередь, словарь, которые могут пригодиться 
для решения различных специальных задач. 
Большая часть классов коллекций содержится в пространствах 
имен 
System.Collections 
(нетипизированные 
классы 
коллекций), 
System.Collections.Generic (типизированные классы коллекций) и System.Collections.Specialized (специальные классы коллекций). Также для 
обеспечения параллельного выполнения задач и многопоточного доступа применяются классы коллекций из пространства имен System.Collections.Concurrent. 
Рассмотрим создание и применение двух коллекций: ArrayList – 
нетипизированная коллекция и List<T> – типизированная коллекция.  
ArrayList хранит экземпляры класса object, но поскольку этот класс – 
родоначальник всех классов C#, вы можете заносить в эту коллекцию 
экземпляры любого типа. Объект любого класса перед помещением в 
ArrayList неявно преобразуется к типу object. Поэтому при извлечении 
объект необходимо явно приводить к его исходному типу.  
Коллекция List<T> хранит экземпляры класса Т. Вместо параметра 
Т при описании переменной вы подставляете имя класса объектов, которые собираетесь хранить в списке. Пример работы с ArrayList и 
List<T> приведен ниже. 

using System; 
using System.Collections; 
using System.Collections.Generic; 
  
namespace Collections 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            // Необобщенная коллекция ArrayList 
            ArrayList objectList = new ArrayList() { 1, 2, "string", 'c', 2.0f }; 
  
            object obj = 45.8; 
  
            objectList.Add(obj); 
            objectList.Add("string2"); 
            objectList.RemoveAt(0); // Удаление первого элемента 
            foreach (object o in objectList) 
            { 
                Console.WriteLine(o);//Вывод элементов коллекции на монитор. 
            } 
            Console.WriteLine("Общее число элементов коллекции: " + objectList.Count); 
            // Обобщенная коллекция List 
            List<string> countries = new List<string>() { "Россия", "США", 
"Великобритания", "Китай" }; 
            countries.Add("Франция"); 
            countries.RemoveAt(1); // Удаление второго элемента 
            foreach (string s in countries) 
            { 
                Console.WriteLine(s); //Вывод элементов коллекции на монитор. 
            } 
  
            Console.ReadLine(); 
        } 
    } 
} 

Здесь используются две коллекции: нетипизированная – ArrayList 
по имени objectList и типизированная – List<string> по имени countries. 
Большинство 
коллекций 
поддерживают 
добавление 
элементов. 
Например, в данном случае добавление производится методом Add, но 
для других коллекций название метода может быть другим. Также 
большинство коллекций реализуют удаление элементов (в данном 
примере производится с помощью метода RemoveAt). 

С помощью свойства Count у коллекций можно посмотреть количество элементов. 
Так как коллекции реализуют интерфейс IEnumerable/IEnumerable 
<T>, то все они поддерживают перебор в цикле foreach. 
Конкретные методы и способы использования могут быть различны для разных классов коллекции, но общие принципы будут одни и те 
же для всех классов коллекций. 

Класс ArrayList 

Ниже приведено описание основных методов и свойств класса 
ArrayList, реализующего нетипизированную коллекцию. Этот класс 
описан в пространстве имен System.Collections и наследует от класса 
System.Object. 
Описание конструкторов, свойств и методов класса коллекции 
ArrayList приведены ниже в таблицах. 

Конструкторы 

Имя 
Описание

ArrayList() 
Инициализирует новый экземпляр класса ArrayList, который является пустым и имеет 
начальную емкость по умолчанию.

ArrayList(ICollection) Инициализирует новый экземпляр класса ArrayList, который содержит элементы, скопированные из указанной коллекции, и обладает 
начальной емкостью, равной количеству скопированных элементов.

ArrayList(Int32) 
Инициализирует новый пустой экземпляр класса 
ArrayList с указанной начальной емкостью.

Свойства 

Имя 
Описание

Capacity 
Возвращает или задает число элементов, которое может 
содержать список ArrayList. 

Count 
Возвращает число элементов, содержащихся в ArrayList.

IsFixedSize Получает значение, указывающее, имеет ли список ArrayList фиксированный размер.

IsReadOnly Получает значение, указывающее, является ли объект ArrayList доступным только для чтения.

Item[Int32] Возвращает или задает элемент по указанному индексу.

Методы 

Имя 
Описание

Add(Object) 
Добавляет объект в конец очереди ArrayList.

BinarySearch(Object) 
Выполняет поиск элемента по всему отсортированному списку ArrayList, используя компаратор по умолчанию, и возвращает индекс элемента, отсчитываемый от нуля. 

Clear() 
Удаляет все элементы из коллекции ArrayList. 

Contains(Object) 
Определяет, входит ли элемент в коллекцию 
ArrayList. 

CopyTo(Array) 
Копирует весь список ArrayList в совместимый 
одномерный массив Array, начиная с начального элемента целевого массива. 

CopyTo(Array, Int32) Копирует целый массив ArrayList в совместимый одномерный массив Array, начиная с заданного индекса целевого массива. 

CopyTo(Int32, Array, 
Int32, Int32) 
Копирует диапазон элементов из списка ArrayList в совместимый одномерный массив Array, начиная с указанного индекса целевого 
массива. 

Equals(Object) 
Определяет, равен ли заданный объект текущему объекту.(Наследуется от Object.) 

GetRange(Int32, 
Int32) 
Возвращает список ArrayList, представляющий 
подмножество элементов исходного списка ArrayList. 

GetType() 
Возвращает объект Type для текущего экземпляра. (Наследуется от Object.) 

IndexOf(Object) 
Осуществляет поиск указанного объекта Object 
и возвращает отсчитываемый от нуля индекс 
первого вхождения в коллекцию ArrayList. 

IndexOf(Object, 
Int32) 
Осуществляет поиск указанного объекта Object 
и возвращает отсчитываемый от нуля индекс 
первого вхождения в диапазоне элементов 
списка ArrayList, начиная с заданного индекса и 
до последнего элемента. 

IndexOf(Object, Int32,
Int32) 
Выполняет поиск указанного объекта Object и 
возвращает отсчитываемый от нуля индекс 
первого вхождения в диапазоне элементов 
списка ArrayList, который начинается с заданного индекса и содержит указанное число элементов. 

Insert(Int32, Object) 
Вставляет элемент в коллекцию ArrayList по 
указанному индексу. 

LastIndexOf(Object) 
Осуществляет поиск указанного объекта Object 
и возвращает отсчитываемый от нуля индекс 
последнего вхождения в коллекцию ArrayList. 

LastIndexOf(Object, 
Int32) 
Осуществляет поиск указанного объекта Object 
и возвращает отсчитываемый от нуля индекс 
последнего вхождения в диапазоне элементов 
списка ArrayList, начиная с первого элемента и 
заканчивая элементом с заданным индексом. 

LastIndexOf(Object, 
Int32, Int32) 
Выполняет поиск указанного объекта Object и 
возвращает отсчитываемый от нуля индекс последнего вхождения в диапазоне элементов 
списка ArrayList, содержащем указанное число 
элементов и заканчивающемся в позиции с указанным индексом. 

Remove(Object) 
Удаляет первое вхождение указанного объекта 
из коллекции ArrayList. 

RemoveAt(Int32) 
Удаляет элемент списка ArrayList с указанным 
индексом. 

RemoveRange(Int32, 
Int32) 
Удаляет диапазон элементов из списка ArrayList. 

Reverse() 
Изменяет порядок элементов во всем списке 
ArrayList на обратный. 

Reverse(Int32, Int32) 
Изменяет порядок элементов в указанном диапазоне. 

Sort() 
Сортирует элементы во всем списке ArrayList. 

Sort(IComparer) 
Сортирует элементы во всем списке ArrayList с 
помощью указанной функции сравнения. 

Sort(Int32, Int32, 
IComparer) 
Сортирует элементы в диапазоне элементов 
списка ArrayList с помощью указанной функции сравнения. 

ToArray() 
Копирует элементы списка ArrayList в новый 
массив Object. 

ToArray(Type) 
Копирует элементы списка ArrayList в новый 
массив с элементами указанного типа. 

ToString() 
Возвращает строковое представление текущего 
объекта. 
(Наследуется от Object.) 

TrimToSize() 
Задает значение емкости, равное действительному количеству элементов в ArrayList. 

 
Класс ArrayList предназначен для хранения коллекции неоднородных объектов. Однако он не всегда обеспечивает наилучшую производительность. Для повышения производитльности вместо него можно 
использовать: 
 для разнородных объектов коллекцию List<Object>; 
 для однородных объектов коллекцию List<T> класса. 
Перед выполнением операции BinarySearch необходимо отсортировать ArrayList путем вызова метода Sort.  
Емкость ArrayList – количество элементов, которые ArrayList может содержать. При добавлении элементов к ArrayList емкость автоматически увеличивается должным образом посредством перераспределения памяти. Емкость может быть уменьшена путем вызова 
TrimToSize или заданием значения свойству Capacity явно. 
Доступ к элементам в этой коллекции осуществляется с помощью 
целочисленного индекса. Индексы в этой коллекции отсчитываются от 
нуля. 
ArrayList принимает в коллекцию значение null как допустимое 
значение. Он также допускает наличие повторяющихся элементов. 
Использование многомерных массивов в качестве элементов в 
ArrayList не поддерживается. 
В следующем примере кода показано, как создать и инициализировать ArrayList и отображение его значения. 

using System; 
using System.Collections; 
 
namespace ConsoleArrayList 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            ArrayList list = new ArrayList(); 
            // Заносим в список объект типа double. 
            list.Add(2.3); 
            // заносим в список объект типа int. 
            list.Add(55); 
            // Заносим в список символ. 
            list.Add('Z'); 
            // Заносим в список строковый массив. 
            list.AddRange(new string[] { "Hello", "world" }); 
            Console.WriteLine("Список после занесения элементов:"); 
            // Перебор значений. 
            foreach (object o in list) 
            { 
                Console.WriteLine(o); 
            } 
 
            // Удаляем первый элемент. 
            list.RemoveAt(0); 
            // Удаляем первый элемент. 
            list.Remove('Z'); 
            // переворачиваем список. 
            list.Reverse(); 
            // Получение элемента по индексу. 
            Console.WriteLine(list[0]); 
            // Получение типа элемента. 
            Console.WriteLine(list[0].GetType().ToString()); 
            Console.WriteLine("Список после модификации:"); 
            // Перебор значений. 
            for (int i = 0; i < list.Count; i++) 
            { 
                Console.WriteLine(list[i]); 
            } 
            Console.ReadLine(); 
        } 
    } 
} 

Результат работы программы: 
 

 

Типизированная коллекция – класс List<T> 

Класс List<T> представляет простейший список однотипных объектов типа Т. Тип объектов задается при описании переменной. В качестве типа элементов списка можно выбрать любой тип C#. 
В таблицах ниже представлены основные методы, свойства и конструкторы. 

Конструкторы  

Имя 
Описание

List<T>() 
Инициализирует новый экземпляр класса 
List<T>, который является пустым и имеет 
начальную емкость по умолчанию.

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

List<T>(Int32) 
Инициализирует новый пустой экземпляр 
класса List<T> с указанной начальной емкостью.

Свойства  

Имя 
Описание

Capacity  
Возвращает или задает общее число элементов, которое 
может вместить внутренняя структура данных без изменения размера. 

Count  
Получает число элементов, содержащихся в List<T>. 

Item[Int32] Возвращает или задает элемент по указанному индексу.