Создать коллекцию в виде динамического массива.
List<char> lst = new List<char>();
Console.WriteLine("Исходное количество элементов: " + lst.Count);
Console.WriteLine();
Console.WriteLine("Добавить 6 элементов");
Добавить элементы в динамический массив.
lst.Add('С');
lst.Add('А');
lst.Add('Е');
lst.Add('В');
lst.Add('D');
lst.Add('F');
Console.WriteLine("Количество элементов: " + lst.Count);
Отобразить содержимое динамического массива,
Используя индексирование массива.
Console.Write("Текущее содержимое: ");
for (int i=0; i < lst.Count;. i++)
Console.Write(lst[i] + " ");
Console.WriteLine("\n");
Console.WriteLine("Удалить 2 элемента ");
Удалить элементы из динамического массива.
lst.Remove('F');
lst.Remove('А');
Console.WriteLine("Количество элементов: " + lst.Count);
Отобразить содержимое динамического массива, используя цикл foreach.
Console.Write("Содержимое: ");
Foreach(char с in lst)
Console.Write(с + " ");
Console.WriteLine("\n");
Console.WriteLine("Добавить еще 20 элементов");
Добавить количество элементов, достаточное для
Принудительного расширения массива,
for(int i=0; i < 20; i++)
lst.Add((char) ('a' + i));
Console.WriteLine("Текущая емкость: " + lst.Capacity);
Console.WriteLine("Количество элементов после добавления 20 новых: " + lst.Count);
Console.Write("Содержимое: ");
Foreach(char с in lst)
Console.Write(с + " ") ;
Console.WriteLine("\n");
Изменить содержимое динамического массива,
Используя индексирование массива.
Console.WriteLine("Изменить три первых элемента");
|
|
lst[0] = 'X';
lst[1] = 'Y' ;
lst[2] = 'Z';
Console.Write("Содержимое: ");
Foreach(char с in lst)
Console.Write(с + " ");
Console.WriteLine();
Следующая строка кода недопустима из-за
Нарушения безопасности обобщенного типа.
// lst.Add(99); // Ошибка, поскольку это не тип char!
}
}
Эта версия программы дает такой же результат, как и предыдущая.
Исходное количество элементов: 0
Добавить 6 элементов
Количество элементов: 6
Текущее содержимое: С А Е В D F
Удалить 2 элемента
Количество элементов: 4
Содержимое: С Е В D
Добавить еще 20 элементов
Текущая емкость: 32
Количество элементов после добавления 20 новых: 24
Содержимое: С Е В D a b c d e f g h i j k l m n o p q r s t
Изменить три первых элемента
Содержимое: X Y Z D a b c d e f g h i j k l m n o p q r s t
Класс LinkedList<T>
В классе LinkedList<T> создается коллекция в виде обобщенного двунаправленного списка. В этом классе реализуются интерфейсы ICollection, ICollection<T>, IEnumerable, IEnumerable<T>, ISerializable и IDeserializationCallback. В двух последних интерфейсах поддерживается сериализация списка. В классе LinkedList<T> определяются два приведенных ниже открытых конструктора.
|
|
Public LinkedListO
public LinkedList(IEnumerable<T> collection)
В первом конструкторе создается пустой связный список, а во втором конструкторе — список, инициализируемый элементами из коллекции collection.
Как и в большинстве других реализаций связных списков, в классе LinkedList<T> инкапсулируются значения, хранящиеся в узлах списка, где находятся также ссылки на предыдущие и последующие элементы списка. Эти узлы представляют собой объекты класса LinkedListNode<T>. В классе LinkedListNode<T> предоставляются четыре следующих свойства.
public LinkedListNode<T> Next { get; }
public LinkedListNode<T> Previous { get; }
public LinkedList<T> List { get; }
public T Value { get; set; }
С помощью свойств Next и Previous получаются ссылки на предыдущий и последующий узлы списка соответственно, что дает возможность обходить список в обоих направлениях. Если же предыдущий или последующий узел отсутствует, то возвращается пустая ссылка. Для получения ссылки на сам список служит свойство List. А с помощью свойства Value можно устанавливать и получать значение, находящееся в узле списка.
В классе LinkedList<T> определяется немало методов. В табл. 25.16 приведены наиболее часто используемые методы данного класса. Кроме того, в классе LinkedList<T> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.
|
|
public LinkedListNode<T> First { get; }
public LinkedListNode<T> Last { get; }
С помощью свойства First получается первый узел в списке, а с помощью свойства Last — последний узел в списке.
Таблица 25.16. Наиболее часто используемые методы, определенные в классе LinkedList<T>
Метод - Описание
public LinkedListNode<T> AddAfter(LinkedListNode<T> node , T value) - Добавляет в список узел со значением value непосредственно после указанного узла node. Указываемый узел node не должен быть пустым (null). Метод возвращает ссылку на узел, содержащий значение value
public void AddAfter(LinkedListNode<T> node, LinkedListNode<T> newNode) - Добавляет в список новый узел newNode непо
средственно после указанного узла node. Указываемый узел node не должен быть пустым (null). Если узел node отсутствует в списке или если новый узел newNode является частью другого списка, то* генерируется исключение InvalidOperationException
public LinkedListNode<T> AddBefore(LinkedListNode<T> node, T value) - Добавляет в список узел со значением value непо
средственно перед указанным узлом node. Указываемый узел node не должен быть пустым (null). Метод возвращает ссылку на узел, содержащий значение value
|
|
public void AddBefore(LinkedListNode<T> node , LinkedListNode<T> newNode) - Добавляет в список новый узел newNode не
посредственно перед указанным узлом node. Указываемый узел node не должен быть пустым (null). Если узел node отсутствует в списке или если новый узел newNode является частью другого списка, то генерируется исключение InvalidOperationException
public LinkedList<T> AddFirst(T value) - Добавляет узел со значением value в начало списка. Метод возвращает ссылку на узел, содержащий значение value
public void AddFirst(LinkedListNode node) - Добавляет узел node в начало списка. Если узел node является частью другого списка, то генерируется исключение InvalidOperationException
public LinkedList<T> AddLast(T value) - Добавляет узел со значением value в конец списка. Метод возвращает ссылку на узел, содержащий значение value
public void AddLast(LinkedListNode node) - Добавляет узел node в конец списка. Если узел node является частью другого списка, то генерируется исключение InvalidOperationException
public LinkedList<T> Find(T value) - Возвращает ссылку на первый узел в списке, имеющий значение value. Если искомое значение value отсутствует в списке, то возвращается пустое значение
public LinkedList<T> FindLast(T value) - Возвращает ссылку на последний узел в списке, имеющий значение value. Если искомое значение value отсутствует в списке, то возвращается пустое значение
public bool Remove(T value) - Удаляет из списка первый узел, содержащий значение value. Возвращает логическое значение true, если узел удален, т.е. если узел со значением value обнаружен в списке и удален; в противном случае возвращает логическое значение false
public void Remove(LinkedList<T> node) - Удаляет из списка узел, соответствующий указанному узлу node. Если узел node отсутствует в списке, то генерируется исключение InvalidOperationException
public void RemoveFirst() - Удаляет из списка первый узел
public void RemoveLast() - Удаляет из списка последний узел
В приведенном ниже примере программы демонстрируется применение класса LinkedList<T>.
// Продемонстрировать применение класса LinkedList<T>.
using System;
using System.Collections.Generic;
class GenLinkedListDemo {
static void Main() {
Создать связный список.
LinkedList<char> ll = new LinkedList<char>();
Console.WriteLine("Исходное количество элементов в списке: " + ll.Count);
Console.WriteLine();
Console.WriteLine("Добавить в список 5 элементов");
Дата добавления: 2019-02-12; просмотров: 283; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!